From c35e6c503494cfffe5f3f008f90c035bc7ecf3b8 Mon Sep 17 00:00:00 2001 From: Nikita Asabin Date: Thu, 30 Mar 2017 17:37:41 +0300 Subject: [PATCH 1/2] Add json-api-example --- json-api-example | 1 + 1 file changed, 1 insertion(+) create mode 160000 json-api-example diff --git a/json-api-example b/json-api-example new file mode 160000 index 0000000..fabdd2c --- /dev/null +++ b/json-api-example @@ -0,0 +1 @@ +Subproject commit fabdd2c843be8700d4529ddef2c81f4f2790755c From 7b5f85a00913fc4e7ebc660622075ca92cf0c913 Mon Sep 17 00:00:00 2001 From: Nikita Asabin Date: Thu, 30 Mar 2017 18:06:03 +0300 Subject: [PATCH 2/2] Add json api example --- JsonExample/.gitignore | 25 + JsonExample/.travis.yml | 31 + JsonExample/CI Scripts/Carthage | 4 + JsonExample/CI Scripts/IncrementBuild | 46 + .../project.pbxproj | 1865 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/AppStore.xcscheme | 133 ++ .../xcschemes/Production.xcscheme | 133 ++ .../xcshareddata/xcschemes/Staging.xcscheme | 133 ++ .../contents.xcworkspacedata | 10 + .../Json-Api-Example/AppDelegate.swift | 191 ++ .../Json-Api-Example/Authorization.storyboard | 310 +++ JsonExample/Json-Api-Example/BridgeHeader.h | 21 + JsonExample/Json-Api-Example/Constants.swift | 40 + .../.xccurrentversion | 8 + .../Json-Api-Example.xcdatamodel/contents | 4 + JsonExample/Json-Api-Example/DeepLink.swift | 126 ++ JsonExample/Json-Api-Example/Extensions.swift | 9 + .../GVAligmentCollectionViewFlowLayout.h | 30 + .../GVAligmentCollectionViewFlowLayout.m | 53 + JsonExample/Json-Api-Example/Helpers.swift | 28 + .../AppIcon-Staging.appiconset/Contents.json | 44 + .../Icon-40@2x-1.png | Bin 0 -> 9571 bytes .../AppIcon-Staging.appiconset/Icon-40@3x.png | Bin 0 -> 16349 bytes .../AppIcon-Staging.appiconset/Icon-60@2x.png | Bin 0 -> 16349 bytes .../AppIcon-Staging.appiconset/Icon-60@3x.png | Bin 0 -> 27567 bytes .../Icon-Small@2x.png | Bin 0 -> 6018 bytes .../Icon-Small@3x.png | Bin 0 -> 10804 bytes .../AppIcon.appiconset/Contents.json | 44 + .../AppIcon.appiconset/Icon-40@2x.png | Bin 0 -> 7452 bytes .../AppIcon.appiconset/Icon-40@3x.png | Bin 0 -> 12172 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 0 -> 12172 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 0 -> 20157 bytes .../AppIcon.appiconset/Icon-Small@2x.png | Bin 0 -> 4762 bytes .../AppIcon.appiconset/Icon-Small@3x.png | Bin 0 -> 8268 bytes .../Images.xcassets/Contents.json | 6 + .../test.imageset/Artboard 1-1.png | Bin 0 -> 120 bytes .../test.imageset/Artboard 1-2.png | Bin 0 -> 120 bytes .../test.imageset/Artboard 1.png | Bin 0 -> 120 bytes .../test.imageset/Contents.json | 23 + JsonExample/Json-Api-Example/Info.plist | 97 + .../JALoginViewController.swift | 166 ++ .../JARegistrationViewController.swift | 161 ++ .../Json-Api-Example/JASpineManager.swift | 82 + .../Json-Api-Example/JAToDoResource.swift | 45 + .../JAToDoTableViewCell.swift | 35 + .../JAToDoViewController.swift | 66 + .../Json-Api-Example/JAUserResource.swift | 67 + .../Json-Api-Example/LaunchScreen.storyboard | 50 + .../Base.lproj/Localizable.strings | 18 + .../Localization/ru.lproj/Localizable.strings | 18 + JsonExample/Json-Api-Example/Main.storyboard | 164 ++ JsonExample/Json-Api-Example/Protocols.swift | 9 + JsonExample/Json-Api-Example/Scripts/build.sh | 2 + .../Json-Api-Example/Scripts/mogend.sh | 20 + JsonExample/Json-Api-Example/Scripts/test.sh | 14 + .../Json-Api-Example/ViewController.swift | 30 + .../Json-Api-ExampleTests/FSTestHelpers.swift | 42 + JsonExample/Json-Api-ExampleTests/Info.plist | 24 + .../Swift_BaseTests.swift | 63 + .../Json-Api-ExampleUITests/Info.plist | 24 + .../Swift_BaseUITests.swift | 45 + JsonExample/LICENSE | 22 + JsonExample/Podfile | 33 + JsonExample/Podfile.lock | 45 + JsonExample/README.md | 62 + JsonExample/generate_entities.sh | 8 + 67 files changed, 4736 insertions(+) create mode 100755 JsonExample/.gitignore create mode 100755 JsonExample/.travis.yml create mode 100755 JsonExample/CI Scripts/Carthage create mode 100755 JsonExample/CI Scripts/IncrementBuild create mode 100755 JsonExample/Json-Api-Example.xcodeproj/project.pbxproj create mode 100755 JsonExample/Json-Api-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100755 JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/AppStore.xcscheme create mode 100755 JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/Production.xcscheme create mode 100755 JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/Staging.xcscheme create mode 100755 JsonExample/Json-Api-Example.xcworkspace/contents.xcworkspacedata create mode 100755 JsonExample/Json-Api-Example/AppDelegate.swift create mode 100755 JsonExample/Json-Api-Example/Authorization.storyboard create mode 100755 JsonExample/Json-Api-Example/BridgeHeader.h create mode 100755 JsonExample/Json-Api-Example/Constants.swift create mode 100755 JsonExample/Json-Api-Example/CoreData/Json-Api-Example.xcdatamodeld/.xccurrentversion create mode 100755 JsonExample/Json-Api-Example/CoreData/Json-Api-Example.xcdatamodeld/Json-Api-Example.xcdatamodel/contents create mode 100755 JsonExample/Json-Api-Example/DeepLink.swift create mode 100755 JsonExample/Json-Api-Example/Extensions.swift create mode 100755 JsonExample/Json-Api-Example/GVAligmentCollectionViewFlowLayout.h create mode 100755 JsonExample/Json-Api-Example/GVAligmentCollectionViewFlowLayout.m create mode 100755 JsonExample/Json-Api-Example/Helpers.swift create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Contents.json create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@2x-1.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@3x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@2x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@3x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@2x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@3x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/Contents.json create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1-1.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1-2.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1.png create mode 100755 JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Contents.json create mode 100755 JsonExample/Json-Api-Example/Info.plist create mode 100644 JsonExample/Json-Api-Example/JALoginViewController.swift create mode 100644 JsonExample/Json-Api-Example/JARegistrationViewController.swift create mode 100644 JsonExample/Json-Api-Example/JASpineManager.swift create mode 100644 JsonExample/Json-Api-Example/JAToDoResource.swift create mode 100644 JsonExample/Json-Api-Example/JAToDoTableViewCell.swift create mode 100644 JsonExample/Json-Api-Example/JAToDoViewController.swift create mode 100644 JsonExample/Json-Api-Example/JAUserResource.swift create mode 100755 JsonExample/Json-Api-Example/LaunchScreen.storyboard create mode 100755 JsonExample/Json-Api-Example/Localization/Base.lproj/Localizable.strings create mode 100755 JsonExample/Json-Api-Example/Localization/ru.lproj/Localizable.strings create mode 100644 JsonExample/Json-Api-Example/Main.storyboard create mode 100755 JsonExample/Json-Api-Example/Protocols.swift create mode 100755 JsonExample/Json-Api-Example/Scripts/build.sh create mode 100755 JsonExample/Json-Api-Example/Scripts/mogend.sh create mode 100755 JsonExample/Json-Api-Example/Scripts/test.sh create mode 100755 JsonExample/Json-Api-Example/ViewController.swift create mode 100755 JsonExample/Json-Api-ExampleTests/FSTestHelpers.swift create mode 100755 JsonExample/Json-Api-ExampleTests/Info.plist create mode 100755 JsonExample/Json-Api-ExampleTests/Swift_BaseTests.swift create mode 100755 JsonExample/Json-Api-ExampleUITests/Info.plist create mode 100755 JsonExample/Json-Api-ExampleUITests/Swift_BaseUITests.swift create mode 100755 JsonExample/LICENSE create mode 100755 JsonExample/Podfile create mode 100755 JsonExample/Podfile.lock create mode 100755 JsonExample/README.md create mode 100755 JsonExample/generate_entities.sh diff --git a/JsonExample/.gitignore b/JsonExample/.gitignore new file mode 100755 index 0000000..34c4aa7 --- /dev/null +++ b/JsonExample/.gitignore @@ -0,0 +1,25 @@ +# OS X +.DS_Store + +# Xcode + +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +.xcbkptlist + +Pods/ +Carthage/ diff --git a/JsonExample/.travis.yml b/JsonExample/.travis.yml new file mode 100755 index 0000000..7166dfb --- /dev/null +++ b/JsonExample/.travis.yml @@ -0,0 +1,31 @@ +language: objective-c + +xcode_workspace: Json-Api-Example.xcworkspace +xcode_scheme: Staging + +before_install: + - rvm install 2.2.5 + - export LANG=en_US.UTF-8 + - sudo gem install cocoapods -v '0.39.0' + +install: + - pod install + +script: + - ./Json-Api-Example/Scripts/build.sh + - ./Json-Api-Example/Scripts/test.sh + +branches: + only: + - master + +notifications: + hipchat: + rooms: + - $API_TOKEN@ios-base + email: + recipients: + # - one@example.com + # - other@example.com + on_success: change # [always|never|change] # default: change + on_failure: change # [always|never|change] # default: always diff --git a/JsonExample/CI Scripts/Carthage b/JsonExample/CI Scripts/Carthage new file mode 100755 index 0000000..786f291 --- /dev/null +++ b/JsonExample/CI Scripts/Carthage @@ -0,0 +1,4 @@ +#!/bin/sh +echo "Carthage script started" +carthage bootstrap --platform iOS +echo "Carthage script ended" \ No newline at end of file diff --git a/JsonExample/CI Scripts/IncrementBuild b/JsonExample/CI Scripts/IncrementBuild new file mode 100755 index 0000000..2e18213 --- /dev/null +++ b/JsonExample/CI Scripts/IncrementBuild @@ -0,0 +1,46 @@ +#!/bin/sh +#Increment build +#Setup variables + +CURRENT_COMMIT_HEAD="$(git rev-parse HEAD)" +CURRENT_COMMIT_REMOTE="$(git rev-parse origin/master)" + +PROJECT_NAME="Json-Api-Example" + +if [ "$CURRENT_COMMIT_HEAD" = "$CURRENT_COMMIT_REMOTE" ]; then + #Setup git + echo "Configuring of git..." + git config user.email "ios-admin@flatstack.com" + git config user.name "CI Server" + echo "Done" + #Get Info.plist file + CURRENT_DIR=$(dirname $PWD) + INFOPLIST_FILE="${PROJECT_NAME}/Info.plist" + echo "info.plist: ${INFOPLIST_FILE}" + echo "" + #Get build number + echo "Getting build number..." + BUILD_NUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFOPLIST_FILE}") + echo "Build number: ${BUILD_NUM}" + echo "" + #Create tag + TAG_NAME="Build_${BUILD_NUM}" + git tag $TAG_NAME + #Increment build number + BUILD_NUM=$(expr $BUILD_NUM + 1) + echo "Increasing build number to ${BUILD_NUM}..." + /usr/libexec/Plistbuddy -c "Set CFBundleVersion ${BUILD_NUM}" "${INFOPLIST_FILE}" + echo "Done" + #Commiting changes + echo "Commiting changes" + git add ${GREENHOUSE_BUILD_DIR}/${PROJECT_NAME}/Info.plist + git commit -m 'increment build number [skip ci]' + echo "Done" + #Pushing to git + echo "Pushing to git" + git push origin master + git push origin $TAG_NAME + echo "Done" +else + echo "Current branch is not master" +fi \ No newline at end of file diff --git a/JsonExample/Json-Api-Example.xcodeproj/project.pbxproj b/JsonExample/Json-Api-Example.xcodeproj/project.pbxproj new file mode 100755 index 0000000..094cb89 --- /dev/null +++ b/JsonExample/Json-Api-Example.xcodeproj/project.pbxproj @@ -0,0 +1,1865 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 079268FB1E8CEC5D00406C00 /* JAToDoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 079268FA1E8CEC5D00406C00 /* JAToDoViewController.swift */; }; + 079268FD1E8CF87F00406C00 /* JAToDoTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 079268FC1E8CF87F00406C00 /* JAToDoTableViewCell.swift */; }; + 07CF85FB1E854BFD008C8038 /* Authorization.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 07CF85FA1E854BFD008C8038 /* Authorization.storyboard */; }; + 07CF85FE1E854D28008C8038 /* JALoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF85FC1E854D28008C8038 /* JALoginViewController.swift */; }; + 07CF85FF1E854D28008C8038 /* JARegistrationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF85FD1E854D28008C8038 /* JARegistrationViewController.swift */; }; + 07CF86011E854DC0008C8038 /* JASpineManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF86001E854DC0008C8038 /* JASpineManager.swift */; }; + 07CF86031E854EF6008C8038 /* JAUserResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF86021E854EF6008C8038 /* JAUserResource.swift */; }; + 07CF86061E857E07008C8038 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 07CF86051E857E07008C8038 /* Main.storyboard */; }; + 07CF86081E857F08008C8038 /* JAToDoResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF86071E857F08008C8038 /* JAToDoResource.swift */; }; + 1710DE5F1C453AF800912C5B /* Swift_BaseUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1710DE5E1C453AF800912C5B /* Swift_BaseUITests.swift */; }; + 172013901D11A11B00A39C1D /* DeepLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1720138F1D11A11B00A39C1D /* DeepLink.swift */; }; + 2124DFA01A8DF48000422313 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2124DF9F1A8DF48000422313 /* ViewController.swift */; }; + 212D018E1BB1986B00B34340 /* Swift_BaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212D018D1BB1986B00B34340 /* Swift_BaseTests.swift */; }; + 213B89BF19F01A1E005D3749 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 213B89BE19F01A1E005D3749 /* CoreGraphics.framework */; }; + 214F4FF21BFDC2CF0084BE32 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214F4FF11BFDC2CF0084BE32 /* Extensions.swift */; }; + 214F4FF41BFDC2D90084BE32 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214F4FF31BFDC2D90084BE32 /* Helpers.swift */; }; + 214F4FF61BFDC35C0084BE32 /* Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214F4FF51BFDC35C0084BE32 /* Protocols.swift */; }; + 2158286D1A91E2F200833BE6 /* mogend.sh in Resources */ = {isa = PBXBuildFile; fileRef = 2158286B1A91E2F200833BE6 /* mogend.sh */; }; + 218C64B81BA078BA00EEEDF1 /* Json-Api-Example.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 218C64B61BA078BA00EEEDF1 /* Json-Api-Example.xcdatamodeld */; }; + 218C64C01BA07DDE00EEEDF1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 218C64BD1BA07DDE00EEEDF1 /* Localizable.strings */; }; + 21DB301519DD2289003A418D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21DB301419DD2289003A418D /* AppDelegate.swift */; }; + 21DB301F19DD2289003A418D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 21DB301E19DD2289003A418D /* Images.xcassets */; }; + 21DB304919DD2D6D003A418D /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21DB304819DD2D6D003A418D /* Constants.swift */; }; + 21E157E21BB3EDF40041FCE4 /* FSTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21E157E11BB3EDF40041FCE4 /* FSTestHelpers.swift */; }; + 21E617E31CE60676005D67E0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 21E617E21CE60676005D67E0 /* LaunchScreen.storyboard */; }; + 2AA988380CB5F0BA261165A1 /* Pods_Abstract_Swift_BaseTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7E04C71AF697F9F512C851E /* Pods_Abstract_Swift_BaseTests.framework */; }; + 2F8E831622E0F58DD39F3CB1 /* Pods_Abstract_Json_Api_ExampleUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2858AD89A209F39375990BF /* Pods_Abstract_Json_Api_ExampleUITests.framework */; }; + 81ABC4E5D5B644C560E0AA21 /* Pods_Abstract_Swift_BaseUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9091B29869F8A46A78676A7 /* Pods_Abstract_Swift_BaseUITests.framework */; }; + 9961F8C14FACF28B21EE213B /* Pods_Abstract_Json_Api_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAF608A93FFFFF374E5F020F /* Pods_Abstract_Json_Api_Example.framework */; }; + D6DB3294551F1BD32F16640A /* Pods_Abstract_Json_Api_ExampleTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44B6C943679DDBF040A5D66C /* Pods_Abstract_Json_Api_ExampleTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildRule section */ + 21DB304A19DD32B1003A418D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + fileType = wrapper.xcdatamodeld; + isEditable = 1; + outputFiles = ( + "$(DERIVED_FILES_DIR)/$(INPUT_FILE_BASE).mom", + ); + script = "echo \"Running mogend (Data model version files)\"\n\"${PROJECT_DIR}/Json-Api-Example/Scripts/mogend.sh\""; + }; + 21DB304B19DD32D9003A418D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + fileType = wrapper.xcdatamodel; + isEditable = 1; + outputFiles = ( + "$(DERIVED_FILES_DIR)/$(INPUT_FILE_BASE).momd", + ); + script = "echo \"Running mogend (Data model files)\"\n\"${PROJECT_DIR}/Json-Api-Example/Scripts/mogend.sh"; + }; +/* End PBXBuildRule section */ + +/* Begin PBXContainerItemProxy section */ + 1710DE611C453AF800912C5B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 21DB300719DD2289003A418D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 21DB300E19DD2289003A418D; + remoteInfo = "Json-Api-Example"; + }; + 212D01901BB1986B00B34340 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 21DB300719DD2289003A418D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 21DB300E19DD2289003A418D; + remoteInfo = "Json-Api-Example"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 020C4A5E30B743EDD370DB89 /* Pods-Abstract-Json-Api-Example.test staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-Example.test staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example.test staging.xcconfig"; sourceTree = ""; }; + 079268FA1E8CEC5D00406C00 /* JAToDoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JAToDoViewController.swift; sourceTree = ""; }; + 079268FC1E8CF87F00406C00 /* JAToDoTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JAToDoTableViewCell.swift; sourceTree = ""; }; + 07CF85FA1E854BFD008C8038 /* Authorization.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Authorization.storyboard; sourceTree = ""; }; + 07CF85FC1E854D28008C8038 /* JALoginViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JALoginViewController.swift; sourceTree = ""; }; + 07CF85FD1E854D28008C8038 /* JARegistrationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JARegistrationViewController.swift; sourceTree = ""; }; + 07CF86001E854DC0008C8038 /* JASpineManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JASpineManager.swift; sourceTree = ""; }; + 07CF86021E854EF6008C8038 /* JAUserResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JAUserResource.swift; sourceTree = ""; }; + 07CF86051E857E07008C8038 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; + 07CF86071E857F08008C8038 /* JAToDoResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JAToDoResource.swift; sourceTree = ""; }; + 1218E154FF6E17259B67BF8D /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1710DE5C1C453AF700912C5B /* Json-Api-ExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Json-Api-ExampleUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1710DE5E1C453AF800912C5B /* Swift_BaseUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Swift_BaseUITests.swift; sourceTree = ""; }; + 1710DE601C453AF800912C5B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1720138F1D11A11B00A39C1D /* DeepLink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLink.swift; sourceTree = ""; }; + 194478471AAF90AF00A34744 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + 19D856C11AB5ED2E0014C459 /* build.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = build.sh; path = Scripts/build.sh; sourceTree = ""; }; + 19D856C51AB5ED2E0014C459 /* test.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = test.sh; path = Scripts/test.sh; sourceTree = ""; }; + 19D856C71AB5EDDF0014C459 /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .travis.yml; sourceTree = SOURCE_ROOT; }; + 1EEA300C1693C74958C4FE90 /* Pods-Abstract-Json-Api-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example.debug.xcconfig"; sourceTree = ""; }; + 2124DF9F1A8DF48000422313 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 212D018B1BB1986B00B34340 /* Json-Api-ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Json-Api-ExampleTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 212D018D1BB1986B00B34340 /* Swift_BaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Swift_BaseTests.swift; sourceTree = ""; }; + 212D018F1BB1986B00B34340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 213B89BE19F01A1E005D3749 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 213B89C019F01A40005D3749 /* SpriteKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SpriteKit.framework; path = System/Library/Frameworks/SpriteKit.framework; sourceTree = SDKROOT; }; + 214F4FF11BFDC2CF0084BE32 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; + 214F4FF31BFDC2D90084BE32 /* Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = ""; }; + 214F4FF51BFDC35C0084BE32 /* Protocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Protocols.swift; sourceTree = ""; }; + 21513BBD19EBCBFA00EE6273 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; + 2158286B1A91E2F200833BE6 /* mogend.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = mogend.sh; path = Scripts/mogend.sh; sourceTree = ""; }; + 218C64B71BA078BA00EEEDF1 /* Json-Api-Example.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Json-Api-Example.xcdatamodel"; sourceTree = ""; }; + 218C64C21BA07E1F00EEEDF1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; + 218C64C31BA07E4300EEEDF1 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + 21C9F2DF19E833300084D18D /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 21DB300F19DD2289003A418D /* Json-Api-Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Json-Api-Example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 21DB301319DD2289003A418D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 21DB301419DD2289003A418D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 21DB301E19DD2289003A418D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 21DB303819DD2341003A418D /* BridgeHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BridgeHeader.h; sourceTree = ""; }; + 21DB304819DD2D6D003A418D /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 21E157E11BB3EDF40041FCE4 /* FSTestHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FSTestHelpers.swift; path = "Json-Api-ExampleTests/FSTestHelpers.swift"; sourceTree = ""; }; + 21E617E21CE60676005D67E0 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; + 21E617E41CE61BBF005D67E0 /* generate_entities.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = generate_entities.sh; sourceTree = SOURCE_ROOT; }; + 24CD8CBBB8A679E300A592E5 /* Pods-Abstract-Json-Api-Example.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-Example.test.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example.test.xcconfig"; sourceTree = ""; }; + 34CEE7B0A1468777DB0D6EF8 /* Pods-Abstract-Json-Api-ExampleUITests.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleUITests.test.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests.test.xcconfig"; sourceTree = ""; }; + 38B1BC0F25415CD477A6B5B8 /* Pods-Abstract-Json-Api-ExampleUITests.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleUITests.release staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests.release staging.xcconfig"; sourceTree = ""; }; + 3A5FE293BB9438C1AE339D7F /* Pods-Abstract-Json-Api-Example.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-Example.release staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example.release staging.xcconfig"; sourceTree = ""; }; + 44B6C943679DDBF040A5D66C /* Pods_Abstract_Json_Api_ExampleTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Json_Api_ExampleTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 51A0D6856BD58979B29B2269 /* Pods-Abstract-Json-Api-ExampleTests.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleTests.appstore.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests.appstore.xcconfig"; sourceTree = ""; }; + 62261FC7DE20C9A6ACA0BAE4 /* Pods-Abstract-Json-Api-ExampleUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests.debug.xcconfig"; sourceTree = ""; }; + 64B3F1B9224ADD02041E18AA /* Pods-Abstract-Json-Api-ExampleUITests.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleUITests.debug staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests.debug staging.xcconfig"; sourceTree = ""; }; + 6E2293E2DC3390EAB27468D6 /* Pods-Abstract-Json-Api-ExampleTests.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleTests.test.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests.test.xcconfig"; sourceTree = ""; }; + 6FF19AC0520F67714729E8C3 /* Pods-Abstract-Json-Api-ExampleUITests.test staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleUITests.test staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests.test staging.xcconfig"; sourceTree = ""; }; + 71DE0E16F1FA73404577138C /* Pods_Abstract_Swift_Base.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Swift_Base.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 777CEADF0A3987259CB4C60D /* Pods-Abstract-Json-Api-ExampleTests.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleTests.debug staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests.debug staging.xcconfig"; sourceTree = ""; }; + 7EDBE43BF809E4BF3F085A1F /* Pods-Abstract-Json-Api-ExampleTests.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleTests.release staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests.release staging.xcconfig"; sourceTree = ""; }; + 98101F9FE1B08B9670240835 /* Pods-Abstract-Json-Api-Example.appstore debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-Example.appstore debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example.appstore debug.xcconfig"; sourceTree = ""; }; + 9E9AF561EE2CD0A3A7DDD0CF /* Pods-Abstract-Json-Api-Example.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-Example.debug staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example.debug staging.xcconfig"; sourceTree = ""; }; + 9FE58E7B2053F4AFF188DF61 /* Pods-Abstract-Json-Api-ExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests.debug.xcconfig"; sourceTree = ""; }; + AF5D1F97F5C59B62E7E84E1B /* Pods-Abstract-Json-Api-Example.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-Example.appstore.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example.appstore.xcconfig"; sourceTree = ""; }; + B27D5D57B204407114491374 /* Pods-Abstract-Json-Api-ExampleUITests.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleUITests.appstore.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests.appstore.xcconfig"; sourceTree = ""; }; + B4B0F73B11F25FEB89C85F54 /* Pods-Abstract-Json-Api-ExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests.release.xcconfig"; sourceTree = ""; }; + B8D82C4F4021CFF6F5F5CC68 /* Pods-Abstract-Json-Api-ExampleUITests.appstore debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleUITests.appstore debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests.appstore debug.xcconfig"; sourceTree = ""; }; + C2858AD89A209F39375990BF /* Pods_Abstract_Json_Api_ExampleUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Json_Api_ExampleUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C7E04C71AF697F9F512C851E /* Pods_Abstract_Swift_BaseTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Swift_BaseTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CAF608A93FFFFF374E5F020F /* Pods_Abstract_Json_Api_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Json_Api_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D36E011C9F5B75FAD1EAB225 /* Pods-Abstract-Json-Api-ExampleUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests.release.xcconfig"; sourceTree = ""; }; + D9091B29869F8A46A78676A7 /* Pods_Abstract_Swift_BaseUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Swift_BaseUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E52012F8C989ECF5309835D0 /* Pods-Abstract-Json-Api-ExampleTests.appstore debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleTests.appstore debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests.appstore debug.xcconfig"; sourceTree = ""; }; + EE03134474C0070BF8DA767B /* Pods-Abstract-Json-Api-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example.release.xcconfig"; sourceTree = ""; }; + FC6E3D360349BB799F9BA741 /* Pods-Abstract-Json-Api-ExampleTests.test staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Json-Api-ExampleTests.test staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests.test staging.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1710DE591C453AF700912C5B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 81ABC4E5D5B644C560E0AA21 /* Pods_Abstract_Swift_BaseUITests.framework in Frameworks */, + 2F8E831622E0F58DD39F3CB1 /* Pods_Abstract_Json_Api_ExampleUITests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 212D01881BB1986B00B34340 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2AA988380CB5F0BA261165A1 /* Pods_Abstract_Swift_BaseTests.framework in Frameworks */, + D6DB3294551F1BD32F16640A /* Pods_Abstract_Json_Api_ExampleTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 21DB300C19DD2289003A418D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 213B89BF19F01A1E005D3749 /* CoreGraphics.framework in Frameworks */, + 9961F8C14FACF28B21EE213B /* Pods_Abstract_Json_Api_Example.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 07CF86041E854EFD008C8038 /* Resources */ = { + isa = PBXGroup; + children = ( + 07CF86021E854EF6008C8038 /* JAUserResource.swift */, + 07CF86071E857F08008C8038 /* JAToDoResource.swift */, + ); + name = Resources; + sourceTree = ""; + }; + 1710DE5D1C453AF800912C5B /* Json-Api-ExampleUITests */ = { + isa = PBXGroup; + children = ( + 1710DE5E1C453AF800912C5B /* Swift_BaseUITests.swift */, + 1710DE601C453AF800912C5B /* Info.plist */, + ); + path = "Json-Api-ExampleUITests"; + sourceTree = ""; + }; + 196D6E161BAB0736000B7997 /* Helpers */ = { + isa = PBXGroup; + children = ( + 214F4FF31BFDC2D90084BE32 /* Helpers.swift */, + 214F4FF11BFDC2CF0084BE32 /* Extensions.swift */, + 214F4FF51BFDC35C0084BE32 /* Protocols.swift */, + ); + name = Helpers; + sourceTree = ""; + }; + 19C66A341C1DC54800C44FE3 /* Classes */ = { + isa = PBXGroup; + children = ( + 1720138F1D11A11B00A39C1D /* DeepLink.swift */, + 07CF86001E854DC0008C8038 /* JASpineManager.swift */, + ); + name = Classes; + sourceTree = ""; + }; + 19D856BF1AB5ECF50014C459 /* Travis CI */ = { + isa = PBXGroup; + children = ( + 19D856C71AB5EDDF0014C459 /* .travis.yml */, + 19D856C11AB5ED2E0014C459 /* build.sh */, + 19D856C51AB5ED2E0014C459 /* test.sh */, + ); + name = "Travis CI"; + sourceTree = ""; + }; + 212D01801BB1977100B34340 /* Tests */ = { + isa = PBXGroup; + children = ( + 21E157E11BB3EDF40041FCE4 /* FSTestHelpers.swift */, + 212D018C1BB1986B00B34340 /* UnitTests */, + ); + name = Tests; + sourceTree = ""; + }; + 212D018C1BB1986B00B34340 /* UnitTests */ = { + isa = PBXGroup; + children = ( + 212D018D1BB1986B00B34340 /* Swift_BaseTests.swift */, + 212D018F1BB1986B00B34340 /* Info.plist */, + ); + name = UnitTests; + path = "Json-Api-ExampleTests"; + sourceTree = ""; + }; + 215828691A91E2E000833BE6 /* Scripts */ = { + isa = PBXGroup; + children = ( + 21E617E41CE61BBF005D67E0 /* generate_entities.sh */, + 19D856BF1AB5ECF50014C459 /* Travis CI */, + 2158286B1A91E2F200833BE6 /* mogend.sh */, + ); + name = Scripts; + sourceTree = ""; + }; + 218C64B41BA078BA00EEEDF1 /* CoreData */ = { + isa = PBXGroup; + children = ( + 218C64B51BA078BA00EEEDF1 /* Private */, + 218C64B61BA078BA00EEEDF1 /* Json-Api-Example.xcdatamodeld */, + ); + path = CoreData; + sourceTree = ""; + }; + 218C64B51BA078BA00EEEDF1 /* Private */ = { + isa = PBXGroup; + children = ( + ); + path = Private; + sourceTree = ""; + }; + 218C64BC1BA07DDE00EEEDF1 /* Localization */ = { + isa = PBXGroup; + children = ( + 218C64BD1BA07DDE00EEEDF1 /* Localizable.strings */, + ); + path = Localization; + sourceTree = ""; + }; + 21DB300619DD2289003A418D = { + isa = PBXGroup; + children = ( + 21DB301119DD2289003A418D /* Json-Api-Example */, + 212D01801BB1977100B34340 /* Tests */, + 1710DE5D1C453AF800912C5B /* Json-Api-ExampleUITests */, + 21DB301019DD2289003A418D /* Products */, + 5C5B41AD2B6E0DFDD4D53E6B /* Frameworks */, + 35A5DC772BDBEE89744BCCF8 /* Pods */, + ); + sourceTree = ""; + }; + 21DB301019DD2289003A418D /* Products */ = { + isa = PBXGroup; + children = ( + 21DB300F19DD2289003A418D /* Json-Api-Example.app */, + 212D018B1BB1986B00B34340 /* Json-Api-ExampleTests.xctest */, + 1710DE5C1C453AF700912C5B /* Json-Api-ExampleUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 21DB301119DD2289003A418D /* Json-Api-Example */ = { + isa = PBXGroup; + children = ( + 21DB304819DD2D6D003A418D /* Constants.swift */, + 21DB301419DD2289003A418D /* AppDelegate.swift */, + 21E617E21CE60676005D67E0 /* LaunchScreen.storyboard */, + 07CF85FA1E854BFD008C8038 /* Authorization.storyboard */, + 07CF86051E857E07008C8038 /* Main.storyboard */, + 21DB301E19DD2289003A418D /* Images.xcassets */, + 07CF86041E854EFD008C8038 /* Resources */, + 196D6E161BAB0736000B7997 /* Helpers */, + E736C5E11A25CF8200B8986E /* API */, + 218C64B41BA078BA00EEEDF1 /* CoreData */, + 19C66A341C1DC54800C44FE3 /* Classes */, + E731DC711A1CB30C00E12CBA /* Views */, + E736C5A41A252B1500B8986E /* Controllers */, + 21DB301219DD2289003A418D /* Supporting Files */, + ); + path = "Json-Api-Example"; + sourceTree = ""; + }; + 21DB301219DD2289003A418D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 218C64BC1BA07DDE00EEEDF1 /* Localization */, + 21DB301319DD2289003A418D /* Info.plist */, + 21DB303819DD2341003A418D /* BridgeHeader.h */, + 215828691A91E2E000833BE6 /* Scripts */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 35A5DC772BDBEE89744BCCF8 /* Pods */ = { + isa = PBXGroup; + children = ( + 1EEA300C1693C74958C4FE90 /* Pods-Abstract-Json-Api-Example.debug.xcconfig */, + 98101F9FE1B08B9670240835 /* Pods-Abstract-Json-Api-Example.appstore debug.xcconfig */, + 9E9AF561EE2CD0A3A7DDD0CF /* Pods-Abstract-Json-Api-Example.debug staging.xcconfig */, + EE03134474C0070BF8DA767B /* Pods-Abstract-Json-Api-Example.release.xcconfig */, + 24CD8CBBB8A679E300A592E5 /* Pods-Abstract-Json-Api-Example.test.xcconfig */, + AF5D1F97F5C59B62E7E84E1B /* Pods-Abstract-Json-Api-Example.appstore.xcconfig */, + 3A5FE293BB9438C1AE339D7F /* Pods-Abstract-Json-Api-Example.release staging.xcconfig */, + 020C4A5E30B743EDD370DB89 /* Pods-Abstract-Json-Api-Example.test staging.xcconfig */, + 9FE58E7B2053F4AFF188DF61 /* Pods-Abstract-Json-Api-ExampleTests.debug.xcconfig */, + E52012F8C989ECF5309835D0 /* Pods-Abstract-Json-Api-ExampleTests.appstore debug.xcconfig */, + 777CEADF0A3987259CB4C60D /* Pods-Abstract-Json-Api-ExampleTests.debug staging.xcconfig */, + B4B0F73B11F25FEB89C85F54 /* Pods-Abstract-Json-Api-ExampleTests.release.xcconfig */, + 6E2293E2DC3390EAB27468D6 /* Pods-Abstract-Json-Api-ExampleTests.test.xcconfig */, + 51A0D6856BD58979B29B2269 /* Pods-Abstract-Json-Api-ExampleTests.appstore.xcconfig */, + 7EDBE43BF809E4BF3F085A1F /* Pods-Abstract-Json-Api-ExampleTests.release staging.xcconfig */, + FC6E3D360349BB799F9BA741 /* Pods-Abstract-Json-Api-ExampleTests.test staging.xcconfig */, + 62261FC7DE20C9A6ACA0BAE4 /* Pods-Abstract-Json-Api-ExampleUITests.debug.xcconfig */, + B8D82C4F4021CFF6F5F5CC68 /* Pods-Abstract-Json-Api-ExampleUITests.appstore debug.xcconfig */, + 64B3F1B9224ADD02041E18AA /* Pods-Abstract-Json-Api-ExampleUITests.debug staging.xcconfig */, + D36E011C9F5B75FAD1EAB225 /* Pods-Abstract-Json-Api-ExampleUITests.release.xcconfig */, + 34CEE7B0A1468777DB0D6EF8 /* Pods-Abstract-Json-Api-ExampleUITests.test.xcconfig */, + B27D5D57B204407114491374 /* Pods-Abstract-Json-Api-ExampleUITests.appstore.xcconfig */, + 38B1BC0F25415CD477A6B5B8 /* Pods-Abstract-Json-Api-ExampleUITests.release staging.xcconfig */, + 6FF19AC0520F67714729E8C3 /* Pods-Abstract-Json-Api-ExampleUITests.test staging.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + 5C5B41AD2B6E0DFDD4D53E6B /* Frameworks */ = { + isa = PBXGroup; + children = ( + 194478471AAF90AF00A34744 /* SenTestingKit.framework */, + 213B89C019F01A40005D3749 /* SpriteKit.framework */, + 213B89BE19F01A1E005D3749 /* CoreGraphics.framework */, + 21513BBD19EBCBFA00EE6273 /* MediaPlayer.framework */, + 21C9F2DF19E833300084D18D /* AVFoundation.framework */, + 1218E154FF6E17259B67BF8D /* Pods.framework */, + 71DE0E16F1FA73404577138C /* Pods_Abstract_Swift_Base.framework */, + C7E04C71AF697F9F512C851E /* Pods_Abstract_Swift_BaseTests.framework */, + D9091B29869F8A46A78676A7 /* Pods_Abstract_Swift_BaseUITests.framework */, + CAF608A93FFFFF374E5F020F /* Pods_Abstract_Json_Api_Example.framework */, + 44B6C943679DDBF040A5D66C /* Pods_Abstract_Json_Api_ExampleTests.framework */, + C2858AD89A209F39375990BF /* Pods_Abstract_Json_Api_ExampleUITests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E731DC711A1CB30C00E12CBA /* Views */ = { + isa = PBXGroup; + children = ( + 079268FC1E8CF87F00406C00 /* JAToDoTableViewCell.swift */, + ); + name = Views; + sourceTree = ""; + }; + E736C5A41A252B1500B8986E /* Controllers */ = { + isa = PBXGroup; + children = ( + 07CF85FC1E854D28008C8038 /* JALoginViewController.swift */, + 07CF85FD1E854D28008C8038 /* JARegistrationViewController.swift */, + 2124DF9F1A8DF48000422313 /* ViewController.swift */, + 079268FA1E8CEC5D00406C00 /* JAToDoViewController.swift */, + ); + name = Controllers; + sourceTree = ""; + }; + E736C5E11A25CF8200B8986E /* API */ = { + isa = PBXGroup; + children = ( + ); + name = API; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1710DE5B1C453AF700912C5B /* Json-Api-ExampleUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1710DE6B1C453AF800912C5B /* Build configuration list for PBXNativeTarget "Json-Api-ExampleUITests" */; + buildPhases = ( + 89E91AAF0FB90E6F0FF929E5 /* [CP] Check Pods Manifest.lock */, + 1710DE581C453AF700912C5B /* Sources */, + 1710DE591C453AF700912C5B /* Frameworks */, + 1710DE5A1C453AF700912C5B /* Resources */, + 0785C3FD82F5A4CEF5C1AC4F /* [CP] Copy Pods Resources */, + 83FE9E39EBA6B1459555C2AB /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 1710DE621C453AF800912C5B /* PBXTargetDependency */, + ); + name = "Json-Api-ExampleUITests"; + productName = "Json-Api-ExampleUITests"; + productReference = 1710DE5C1C453AF700912C5B /* Json-Api-ExampleUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + 212D018A1BB1986B00B34340 /* Json-Api-ExampleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 212D01921BB1986B00B34340 /* Build configuration list for PBXNativeTarget "Json-Api-ExampleTests" */; + buildPhases = ( + 0ACA543E4B3B0E6EB48E63C8 /* [CP] Check Pods Manifest.lock */, + 212D01871BB1986B00B34340 /* Sources */, + 212D01881BB1986B00B34340 /* Frameworks */, + 212D01891BB1986B00B34340 /* Resources */, + 1F35F343FE9DD3287707261D /* [CP] Embed Pods Frameworks */, + 27B807D70486544FDB85DAA6 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 212D01911BB1986B00B34340 /* PBXTargetDependency */, + ); + name = "Json-Api-ExampleTests"; + productName = "Json-Api-ExampleTests"; + productReference = 212D018B1BB1986B00B34340 /* Json-Api-ExampleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 21DB300E19DD2289003A418D /* Json-Api-Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = 21DB303119DD2289003A418D /* Build configuration list for PBXNativeTarget "Json-Api-Example" */; + buildPhases = ( + A6DB15C2BC155A2623DF25F0 /* [CP] Check Pods Manifest.lock */, + 21DB300B19DD2289003A418D /* Sources */, + 21DB300C19DD2289003A418D /* Frameworks */, + 21DB300D19DD2289003A418D /* Resources */, + 21B3D19F19E6E2B700EF0D52 /* ShellScript */, + 97E8D7A0CF9962C339626CAC /* [CP] Embed Pods Frameworks */, + 6A105BDE6BBF4E1ACD2AAE0F /* [CP] Copy Pods Resources */, + ); + buildRules = ( + 21DB304B19DD32D9003A418D /* PBXBuildRule */, + 21DB304A19DD32B1003A418D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "Json-Api-Example"; + productName = "Json-Api-Example"; + productReference = 21DB300F19DD2289003A418D /* Json-Api-Example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 21DB300719DD2289003A418D /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftMigration = 0700; + LastSwiftUpdateCheck = 0710; + LastTestingUpgradeCheck = 0700; + LastUpgradeCheck = 0800; + ORGANIZATIONNAME = Flatstack; + TargetAttributes = { + 1710DE5B1C453AF700912C5B = { + CreatedOnToolsVersion = 7.1; + LastSwiftMigration = 0800; + TestTargetID = 21DB300E19DD2289003A418D; + }; + 212D018A1BB1986B00B34340 = { + CreatedOnToolsVersion = 7.0; + LastSwiftMigration = 0800; + TestTargetID = 21DB300E19DD2289003A418D; + }; + 21DB300E19DD2289003A418D = { + CreatedOnToolsVersion = 6.0.1; + DevelopmentTeam = Y49MTY8CU2; + LastSwiftMigration = 0800; + }; + }; + }; + buildConfigurationList = 21DB300A19DD2289003A418D /* Build configuration list for PBXProject "Json-Api-Example" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + ru, + en, + ); + mainGroup = 21DB300619DD2289003A418D; + productRefGroup = 21DB301019DD2289003A418D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 21DB300E19DD2289003A418D /* Json-Api-Example */, + 212D018A1BB1986B00B34340 /* Json-Api-ExampleTests */, + 1710DE5B1C453AF700912C5B /* Json-Api-ExampleUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1710DE5A1C453AF700912C5B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 212D01891BB1986B00B34340 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 21DB300D19DD2289003A418D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 07CF85FB1E854BFD008C8038 /* Authorization.storyboard in Resources */, + 218C64C01BA07DDE00EEEDF1 /* Localizable.strings in Resources */, + 2158286D1A91E2F200833BE6 /* mogend.sh in Resources */, + 07CF86061E857E07008C8038 /* Main.storyboard in Resources */, + 21E617E31CE60676005D67E0 /* LaunchScreen.storyboard in Resources */, + 21DB301F19DD2289003A418D /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0785C3FD82F5A4CEF5C1AC4F /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 0ACA543E4B3B0E6EB48E63C8 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 1F35F343FE9DD3287707261D /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 21B3D19F19E6E2B700EF0D52 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#\"${PODS_ROOT}/Fabric/Fabric.framework/run\" api_key build_secret"; + }; + 27B807D70486544FDB85DAA6 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleTests/Pods-Abstract-Json-Api-ExampleTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 6A105BDE6BBF4E1ACD2AAE0F /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 83FE9E39EBA6B1459555C2AB /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Json-Api-ExampleUITests/Pods-Abstract-Json-Api-ExampleUITests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 89E91AAF0FB90E6F0FF929E5 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 97E8D7A0CF9962C339626CAC /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Json-Api-Example/Pods-Abstract-Json-Api-Example-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + A6DB15C2BC155A2623DF25F0 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1710DE581C453AF700912C5B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1710DE5F1C453AF800912C5B /* Swift_BaseUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 212D01871BB1986B00B34340 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 212D018E1BB1986B00B34340 /* Swift_BaseTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 21DB300B19DD2289003A418D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 218C64B81BA078BA00EEEDF1 /* Json-Api-Example.xcdatamodeld in Sources */, + 21E157E21BB3EDF40041FCE4 /* FSTestHelpers.swift in Sources */, + 079268FB1E8CEC5D00406C00 /* JAToDoViewController.swift in Sources */, + 07CF85FF1E854D28008C8038 /* JARegistrationViewController.swift in Sources */, + 07CF86011E854DC0008C8038 /* JASpineManager.swift in Sources */, + 07CF85FE1E854D28008C8038 /* JALoginViewController.swift in Sources */, + 2124DFA01A8DF48000422313 /* ViewController.swift in Sources */, + 214F4FF61BFDC35C0084BE32 /* Protocols.swift in Sources */, + 079268FD1E8CF87F00406C00 /* JAToDoTableViewCell.swift in Sources */, + 214F4FF41BFDC2D90084BE32 /* Helpers.swift in Sources */, + 21DB301519DD2289003A418D /* AppDelegate.swift in Sources */, + 172013901D11A11B00A39C1D /* DeepLink.swift in Sources */, + 07CF86081E857F08008C8038 /* JAToDoResource.swift in Sources */, + 07CF86031E854EF6008C8038 /* JAUserResource.swift in Sources */, + 21DB304919DD2D6D003A418D /* Constants.swift in Sources */, + 214F4FF21BFDC2CF0084BE32 /* Extensions.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1710DE621C453AF800912C5B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 21DB300E19DD2289003A418D /* Json-Api-Example */; + targetProxy = 1710DE611C453AF800912C5B /* PBXContainerItemProxy */; + }; + 212D01911BB1986B00B34340 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 21DB300E19DD2289003A418D /* Json-Api-Example */; + targetProxy = 212D01901BB1986B00B34340 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 218C64BD1BA07DDE00EEEDF1 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 218C64C21BA07E1F00EEEDF1 /* Base */, + 218C64C31BA07E4300EEEDF1 /* ru */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 1710DE631C453AF800912C5B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 62261FC7DE20C9A6ACA0BAE4 /* Pods-Abstract-Json-Api-ExampleUITests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Json-Api-ExampleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Json-Api-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "Json-Api-Example"; + USES_XCTRUNNER = YES; + }; + name = Debug; + }; + 1710DE641C453AF800912C5B /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B8D82C4F4021CFF6F5F5CC68 /* Pods-Abstract-Json-Api-ExampleUITests.appstore debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Json-Api-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "Json-Api-Example"; + USES_XCTRUNNER = YES; + }; + name = "AppStore Debug"; + }; + 1710DE651C453AF800912C5B /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 64B3F1B9224ADD02041E18AA /* Pods-Abstract-Json-Api-ExampleUITests.debug staging.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Json-Api-ExampleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Json-Api-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "Json-Api-Example"; + USES_XCTRUNNER = YES; + }; + name = "Debug Staging"; + }; + 1710DE661C453AF800912C5B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D36E011C9F5B75FAD1EAB225 /* Pods-Abstract-Json-Api-ExampleUITests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Json-Api-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "Json-Api-Example"; + USES_XCTRUNNER = YES; + }; + name = Release; + }; + 1710DE671C453AF800912C5B /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 34CEE7B0A1468777DB0D6EF8 /* Pods-Abstract-Json-Api-ExampleUITests.test.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Json-Api-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "Json-Api-Example"; + USES_XCTRUNNER = YES; + }; + name = Test; + }; + 1710DE681C453AF800912C5B /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B27D5D57B204407114491374 /* Pods-Abstract-Json-Api-ExampleUITests.appstore.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Json-Api-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "Json-Api-Example"; + USES_XCTRUNNER = YES; + }; + name = AppStore; + }; + 1710DE691C453AF800912C5B /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 38B1BC0F25415CD477A6B5B8 /* Pods-Abstract-Json-Api-ExampleUITests.release staging.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Json-Api-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "Json-Api-Example"; + USES_XCTRUNNER = YES; + }; + name = "Release Staging"; + }; + 1710DE6A1C453AF800912C5B /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6FF19AC0520F67714729E8C3 /* Pods-Abstract-Json-Api-ExampleUITests.test staging.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Json-Api-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "Json-Api-Example"; + USES_XCTRUNNER = YES; + }; + name = "Test Staging"; + }; + 212D01811BB1978500B34340 /* Test */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = Test; + }; + 212D01821BB1978500B34340 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 24CD8CBBB8A679E300A592E5 /* Pods-Abstract-Json-Api-Example.test.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Json-Api-Example"; + BUNDLE_ID = "com.flatstack.Json-Api-Example"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Json-Api-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DTEST"; + PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID)"; + PRODUCT_NAME = "Json-Api-Example"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Json-Api-Example/BridgeHeader.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 1; + URL_HOST = "http://fs-rails-base-api-pr-216.herokuapp.com"; + }; + name = Test; + }; + 212D01831BB1978B00B34340 /* Test Staging */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = "Test Staging"; + }; + 212D01841BB1978B00B34340 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 020C4A5E30B743EDD370DB89 /* Pods-Abstract-Json-Api-Example.test staging.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Staging"; + BUNDLE_DISPLAY_NAME = "Json-Api-Example Staging"; + BUNDLE_ID = "com.flatstack.Json-Api-Example.staging"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Json-Api-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DTEST"; + PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID)"; + PRODUCT_NAME = "Json-Api-Example"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Json-Api-Example/BridgeHeader.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 1; + URL_HOST = "http://fs-rails-base-api-pr-216.herokuapp.com"; + }; + name = "Test Staging"; + }; + 212D01851BB1981C00B34340 /* AppStore Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + }; + name = "AppStore Debug"; + }; + 212D01861BB1981C00B34340 /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 98101F9FE1B08B9670240835 /* Pods-Abstract-Json-Api-Example.appstore debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Json-Api-Example"; + BUNDLE_ID = "com.flatstack.Json-Api-Example"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Json-Api-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DDEBUG"; + PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID)"; + PRODUCT_NAME = "Json-Api-Example"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Json-Api-Example/BridgeHeader.h"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 1; + URL_HOST = "http://fs-rails-base-api-pr-216.herokuapp.com"; + }; + name = "AppStore Debug"; + }; + 212D01931BB1986B00B34340 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9FE58E7B2053F4AFF188DF61 /* Pods-Abstract-Json-Api-ExampleTests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Json-Api-ExampleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Json-Api-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Json-Api-Example.app/Json-Api-Example"; + }; + name = Debug; + }; + 212D01941BB1986B00B34340 /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E52012F8C989ECF5309835D0 /* Pods-Abstract-Json-Api-ExampleTests.appstore debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Json-Api-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Json-Api-Example.app/Json-Api-Example"; + }; + name = "AppStore Debug"; + }; + 212D01951BB1986B00B34340 /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 777CEADF0A3987259CB4C60D /* Pods-Abstract-Json-Api-ExampleTests.debug staging.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Json-Api-ExampleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Json-Api-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Json-Api-Example.app/Json-Api-Example"; + }; + name = "Debug Staging"; + }; + 212D01961BB1986B00B34340 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B4B0F73B11F25FEB89C85F54 /* Pods-Abstract-Json-Api-ExampleTests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Json-Api-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Json-Api-Example.app/Json-Api-Example"; + }; + name = Release; + }; + 212D01971BB1986B00B34340 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6E2293E2DC3390EAB27468D6 /* Pods-Abstract-Json-Api-ExampleTests.test.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = "Json-Api-ExampleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Json-Api-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Json-Api-Example.app/Json-Api-Example"; + }; + name = Test; + }; + 212D01981BB1986B00B34340 /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 51A0D6856BD58979B29B2269 /* Pods-Abstract-Json-Api-ExampleTests.appstore.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Json-Api-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Json-Api-Example.app/Json-Api-Example"; + }; + name = AppStore; + }; + 212D01991BB1986B00B34340 /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7EDBE43BF809E4BF3F085A1F /* Pods-Abstract-Json-Api-ExampleTests.release staging.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Json-Api-ExampleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Json-Api-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Json-Api-Example.app/Json-Api-Example"; + }; + name = "Release Staging"; + }; + 212D019A1BB1986B00B34340 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FC6E3D360349BB799F9BA741 /* Pods-Abstract-Json-Api-ExampleTests.test staging.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = "Json-Api-ExampleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Json-Api-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Json-Api-Example.app/Json-Api-Example"; + }; + name = "Test Staging"; + }; + 21DB302F19DD2289003A418D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + }; + name = Debug; + }; + 21DB303019DD2289003A418D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 21DB303219DD2289003A418D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1EEA300C1693C74958C4FE90 /* Pods-Abstract-Json-Api-Example.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Json-Api-Example"; + BUNDLE_ID = "com.flatstack.Json-Api-Example"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Json-Api-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DDEBUG"; + PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID)"; + PRODUCT_NAME = "Json-Api-Example"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Json-Api-Example/BridgeHeader.h"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 1; + URL_HOST = "http://fs-rails-base-api-pr-216.herokuapp.com"; + }; + name = Debug; + }; + 21DB303319DD2289003A418D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EE03134474C0070BF8DA767B /* Pods-Abstract-Json-Api-Example.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Json-Api-Example"; + BUNDLE_ID = "com.flatstack.Json-Api-Example"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Json-Api-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID)"; + PRODUCT_NAME = "Json-Api-Example"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Json-Api-Example/BridgeHeader.h"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 1; + URL_HOST = "http://fs-rails-base-api-pr-216.herokuapp.com"; + }; + name = Release; + }; + 21DB304C19DD3B30003A418D /* Debug Staging */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + }; + name = "Debug Staging"; + }; + 21DB304D19DD3B30003A418D /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9E9AF561EE2CD0A3A7DDD0CF /* Pods-Abstract-Json-Api-Example.debug staging.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Staging"; + BUNDLE_DISPLAY_NAME = "Json-Api-Example Staging"; + BUNDLE_ID = "com.flatstack.Json-Api-Example.staging"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Json-Api-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DDEBUG"; + PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID)"; + PRODUCT_NAME = "Json-Api-Example"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Json-Api-Example/BridgeHeader.h"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 1; + URL_HOST = "http://fs-rails-base-api-pr-216.herokuapp.com"; + }; + name = "Debug Staging"; + }; + 21DB304F19DD3B48003A418D /* Release Staging */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = "Release Staging"; + }; + 21DB305019DD3B48003A418D /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3A5FE293BB9438C1AE339D7F /* Pods-Abstract-Json-Api-Example.release staging.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Staging"; + BUNDLE_DISPLAY_NAME = "Json-Api-Example Staging"; + BUNDLE_ID = "com.flatstack.Json-Api-Example.staging"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Json-Api-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID)"; + PRODUCT_NAME = "Json-Api-Example"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Json-Api-Example/BridgeHeader.h"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 1; + URL_HOST = "http://fs-rails-base-api-pr-216.herokuapp.com"; + }; + name = "Release Staging"; + }; + E736C5DE1A25320400B8986E /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = AppStore; + }; + E736C5DF1A25320400B8986E /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AF5D1F97F5C59B62E7E84E1B /* Pods-Abstract-Json-Api-Example.appstore.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Json-Api-Example"; + BUNDLE_ID = "com.flatstack.Json-Api-Example"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Json-Api-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID)"; + PRODUCT_NAME = "Json-Api-Example"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Json-Api-Example/BridgeHeader.h"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 1; + URL_HOST = "http://fs-rails-base-api-pr-216.herokuapp.com"; + }; + name = AppStore; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1710DE6B1C453AF800912C5B /* Build configuration list for PBXNativeTarget "Json-Api-ExampleUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1710DE631C453AF800912C5B /* Debug */, + 1710DE641C453AF800912C5B /* AppStore Debug */, + 1710DE651C453AF800912C5B /* Debug Staging */, + 1710DE661C453AF800912C5B /* Release */, + 1710DE671C453AF800912C5B /* Test */, + 1710DE681C453AF800912C5B /* AppStore */, + 1710DE691C453AF800912C5B /* Release Staging */, + 1710DE6A1C453AF800912C5B /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 212D01921BB1986B00B34340 /* Build configuration list for PBXNativeTarget "Json-Api-ExampleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 212D01931BB1986B00B34340 /* Debug */, + 212D01941BB1986B00B34340 /* AppStore Debug */, + 212D01951BB1986B00B34340 /* Debug Staging */, + 212D01961BB1986B00B34340 /* Release */, + 212D01971BB1986B00B34340 /* Test */, + 212D01981BB1986B00B34340 /* AppStore */, + 212D01991BB1986B00B34340 /* Release Staging */, + 212D019A1BB1986B00B34340 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 21DB300A19DD2289003A418D /* Build configuration list for PBXProject "Json-Api-Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 21DB302F19DD2289003A418D /* Debug */, + 212D01851BB1981C00B34340 /* AppStore Debug */, + 21DB304C19DD3B30003A418D /* Debug Staging */, + 21DB303019DD2289003A418D /* Release */, + 212D01811BB1978500B34340 /* Test */, + E736C5DE1A25320400B8986E /* AppStore */, + 21DB304F19DD3B48003A418D /* Release Staging */, + 212D01831BB1978B00B34340 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 21DB303119DD2289003A418D /* Build configuration list for PBXNativeTarget "Json-Api-Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 21DB303219DD2289003A418D /* Debug */, + 212D01861BB1981C00B34340 /* AppStore Debug */, + 21DB304D19DD3B30003A418D /* Debug Staging */, + 21DB303319DD2289003A418D /* Release */, + 212D01821BB1978500B34340 /* Test */, + E736C5DF1A25320400B8986E /* AppStore */, + 21DB305019DD3B48003A418D /* Release Staging */, + 212D01841BB1978B00B34340 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 218C64B61BA078BA00EEEDF1 /* Json-Api-Example.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 218C64B71BA078BA00EEEDF1 /* Json-Api-Example.xcdatamodel */, + ); + currentVersion = 218C64B71BA078BA00EEEDF1 /* Json-Api-Example.xcdatamodel */; + path = "Json-Api-Example.xcdatamodeld"; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 21DB300719DD2289003A418D /* Project object */; +} diff --git a/JsonExample/Json-Api-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/JsonExample/Json-Api-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100755 index 0000000..c31a512 --- /dev/null +++ b/JsonExample/Json-Api-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/AppStore.xcscheme b/JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/AppStore.xcscheme new file mode 100755 index 0000000..1b28c97 --- /dev/null +++ b/JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/AppStore.xcscheme @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/Production.xcscheme b/JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/Production.xcscheme new file mode 100755 index 0000000..a629fcf --- /dev/null +++ b/JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/Production.xcscheme @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/Staging.xcscheme b/JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/Staging.xcscheme new file mode 100755 index 0000000..b6f2bad --- /dev/null +++ b/JsonExample/Json-Api-Example.xcodeproj/xcshareddata/xcschemes/Staging.xcscheme @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JsonExample/Json-Api-Example.xcworkspace/contents.xcworkspacedata b/JsonExample/Json-Api-Example.xcworkspace/contents.xcworkspacedata new file mode 100755 index 0000000..618edf0 --- /dev/null +++ b/JsonExample/Json-Api-Example.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/JsonExample/Json-Api-Example/AppDelegate.swift b/JsonExample/Json-Api-Example/AppDelegate.swift new file mode 100755 index 0000000..1b8104f --- /dev/null +++ b/JsonExample/Json-Api-Example/AppDelegate.swift @@ -0,0 +1,191 @@ +// +// AppDelegate.swift +// Json-Api-Example +// +// Created by Kruperfone on 02.10.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +import UIKit +import CoreData + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + var loadedEnoughToDeepLink : Bool = false + var deepLink : DeepLink? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool + { + self.setupProject() + + return true + } + + func applicationWillResignActive(_ application: UIApplication) + { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) + { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) + { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) + { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) + { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + // Saves changes in the application's managed object context before the application terminates. + } + + //MARK: - Remote Notifications + + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + + let tokenChars = (deviceToken as NSData).bytes.bindMemory(to: CChar.self, capacity: deviceToken.count) + var tokenString = "" + UIFont.systemFont(ofSize: 1, weight: 1) + for i in 0 ..< deviceToken.count { + let formatString = "%02.2hhx" + tokenString += String(format: formatString, arguments: [tokenChars[i]]) + } + + UserDefaults.standard.set(deviceToken, forKey: FSUserDefaultsKey.DeviceToken.Data) + UserDefaults.standard.set(tokenString, forKey: FSUserDefaultsKey.DeviceToken.String) + UserDefaults.standard.synchronize() + } + + func requestForRemoteNotifications () { + UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [UIUserNotificationType.alert, UIUserNotificationType.sound, UIUserNotificationType.badge], categories: nil)) + UIApplication.shared.registerForRemoteNotifications() + } + + func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { + return self.canOpenURL(url, application: application) + } + +} + +extension AppDelegate { + + func setupProject() { + + self.printProjectSettings() + + self.setupProjectForTests() + + JASpineManager.shared.setupSpine() + // Magica Record +// self.setupMagicalRecord() + + //setup SDWebImage +// self.setupSDWebImage() + + //setup Crashlytics + Fabric.with([Crashlytics.self]) + + } + + func setupProjectForTests() { + #if TEST + switch TestingMode() { + case .Unit: + print("Unit Tests") + self.window?.rootViewController = UIViewController() + return + + case .UI: + print("UI Tests") + } + #endif + } + + func printProjectSettings() { + #if DEBUG + // print documents directory and device ID + print("\n*******************************************\nDOCUMENTS:\n\(NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0])\n*******************************************\n") + print("\n*******************************************\nDEVICE ID:\n\((UIDevice.current.identifierForVendor?.uuidString)!)\n*******************************************\n") + print("\n*******************************************\nBUNDLE ID:\n\((Bundle.main.bundleIdentifier)!)\n*******************************************\n") + #endif + } + + +// func setupMagicalRecord() { +// MagicalRecord.setShouldDeleteStoreOnModelMismatch(true) +// MagicalRecord.setupAutoMigratingCoreDataStack() +// MagicalRecord.setLoggingLevel(MagicalRecordLoggingLevel.Off) +// } + +// func setupSDWebImage() { +// let imageCache:SDImageCache = SDImageCache.sharedImageCache() +// imageCache.maxCacheSize = 1024*1024*100 // 100mb on disk +// imageCache.maxMemoryCost = 1024*1024*10 // 10mb in memory +// +// let imageDownloader:SDWebImageDownloader = SDWebImageDownloader.sharedDownloader() +// imageDownloader.downloadTimeout = 60.0 +// } + + +////////DeepLink Handling + func canOpenURL(_ url: URL, application:UIApplication) -> Bool { + if url.host == nil + { + return true; + } + + let urlString = url.absoluteString + let queryArray = urlString.components(separatedBy: "/") + let query = queryArray[2] + + for sectionKey in DeepLinkAppSectionKey.allValues { + if query.range(of: sectionKey.description) != nil + { + let data = urlString.components(separatedBy: "/") + if data.count >= 3 + { + let parameter = data[3] + let userInfo = [sectionKey.description : parameter] + self.applicationHandleDeepLink(application, deepLinkUserInfo: userInfo, sectionKey: sectionKey) + break + } + } + } + return true + } + + func applicationHandleDeepLink(_ application: UIApplication, deepLinkUserInfo userInfo: [AnyHashable: Any],sectionKey: DeepLinkAppSectionKey ) + { + if application.applicationState == UIApplicationState.background || application.applicationState == UIApplicationState.inactive + { + let canDoNow = loadedEnoughToDeepLink + + self.deepLink = DeepLink.create(userInfo,sectionKey: sectionKey) + + if canDoNow + { + self.triggerDeepLinkIfPresent() + } + } + } + + func triggerDeepLinkIfPresent() + { + self.loadedEnoughToDeepLink = true + self.deepLink?.trigger() + self.deepLink = nil + } +} + diff --git a/JsonExample/Json-Api-Example/Authorization.storyboard b/JsonExample/Json-Api-Example/Authorization.storyboard new file mode 100755 index 0000000..b92482d --- /dev/null +++ b/JsonExample/Json-Api-Example/Authorization.storyboard @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JsonExample/Json-Api-Example/BridgeHeader.h b/JsonExample/Json-Api-Example/BridgeHeader.h new file mode 100755 index 0000000..e297c2f --- /dev/null +++ b/JsonExample/Json-Api-Example/BridgeHeader.h @@ -0,0 +1,21 @@ +// +// BridgeHeader.h +// Json-Api-Example +// +// Created by Kruperfone on 02.10.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +// Helpers +@import FSHelpers_Swift; + +// Analytics +@import Fabric; +@import Crashlytics; + + +//@import MagicalRecord; +//@import SDWebImage; + + +//#import "ObjectiveC_Header.h" diff --git a/JsonExample/Json-Api-Example/Constants.swift b/JsonExample/Json-Api-Example/Constants.swift new file mode 100755 index 0000000..95eacff --- /dev/null +++ b/JsonExample/Json-Api-Example/Constants.swift @@ -0,0 +1,40 @@ +// +// Constants.swift +// Json-Api-Example +// +// Created by Kruperfone on 02.10.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +import UIKit + +/*--------------User Defaults keys-------------*/ +enum FSUserDefaultsKey { + + enum DeviceToken { + private static let Prefix = "FSDeviceToken" + + static let Data = GenerateKey(Prefix, key: "Data") + static let String = GenerateKey(Prefix, key: "String") + } +} + +/*----------Notifications---------*/ +enum FSNotificationKey { + + enum Example { + private static let Prefix = "Example" + + static let Key = GenerateKey(Prefix, key: "Key") + } +} + +/*----------Colors----------*/ +enum FSColors { + static let AppColor = UIColor.clear +} + +/*----------Helpers----------*/ +private func GenerateKey (_ prefix: String, key: String) -> String { + return "__\(prefix)-\(key)__" +} diff --git a/JsonExample/Json-Api-Example/CoreData/Json-Api-Example.xcdatamodeld/.xccurrentversion b/JsonExample/Json-Api-Example/CoreData/Json-Api-Example.xcdatamodeld/.xccurrentversion new file mode 100755 index 0000000..13d49b1 --- /dev/null +++ b/JsonExample/Json-Api-Example/CoreData/Json-Api-Example.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + Json-Api-Example.xcdatamodel + + diff --git a/JsonExample/Json-Api-Example/CoreData/Json-Api-Example.xcdatamodeld/Json-Api-Example.xcdatamodel/contents b/JsonExample/Json-Api-Example/CoreData/Json-Api-Example.xcdatamodeld/Json-Api-Example.xcdatamodel/contents new file mode 100755 index 0000000..193f33c --- /dev/null +++ b/JsonExample/Json-Api-Example/CoreData/Json-Api-Example.xcdatamodeld/Json-Api-Example.xcdatamodel/contents @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/JsonExample/Json-Api-Example/DeepLink.swift b/JsonExample/Json-Api-Example/DeepLink.swift new file mode 100755 index 0000000..284c955 --- /dev/null +++ b/JsonExample/Json-Api-Example/DeepLink.swift @@ -0,0 +1,126 @@ +// +// RemoteNotificationDeepLink.swift +// Json-Api-Example +// +// Created by Nikita Asabin on 15.06.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + +import UIKit + +enum DeepLinkAppSectionKey : Int{ + case article = 0 + + static var allValues: [DeepLinkAppSectionKey] { + var sectionKeys: [DeepLinkAppSectionKey] = [] + var i = 0 + while let key = DeepLinkAppSectionKey(rawValue: i) { + sectionKeys.append(key) + i += 1 + } + return sectionKeys + } + + var description : String { + switch self { + case .article: return "article"; + } + } + +} + +enum ArticleType: String { + case ArticleA = "A" + case ArticleB = "B" + case ArticleC = "C" +} + + +class DeepLink: NSObject { + + var sectionKey:DeepLinkAppSectionKey? + + class func create(_ userInfo : [AnyHashable: Any], sectionKey:DeepLinkAppSectionKey) -> DeepLink? + { + let info = userInfo as NSDictionary + + switch sectionKey { + case DeepLinkAppSectionKey.article: + + guard let articleID = info.object(forKey: DeepLinkAppSectionKey.article.description) as? String else {return nil} + + var deepLink : DeepLink? = nil + if !articleID.isEmpty + { + deepLink = DeepLinkArticle(articleStr: articleID) + } + return deepLink + + default: + return nil + } + + } + + fileprivate override init() + { + super.init() + } + + final func trigger() + { + DispatchQueue.main.async + { + self.triggerImp() + { (passedData) in + + } + } + } + + fileprivate func triggerImp(_ completion: ((AnyObject?)->(Void))) + { + completion(nil) + } +} + +class DeepLinkArticle : DeepLink +{ + var articleID : String! + + fileprivate init(articleStr: String) + { + self.articleID = articleStr + super.init() + } + + fileprivate override func triggerImp(_ completion: ((AnyObject?)->(Void))) + { + super.triggerImp() + { (passedData) in + + var vc = UIViewController() + let storyboard = UIStoryboard.init(name: "Main_Storyboard", bundle: nil) + // Handle Deep Link Data to present the Article passed through + + switch self.articleID { + case ArticleType.ArticleA.rawValue : + vc = storyboard.instantiateViewController(withIdentifier: "ViewControllerA") + break + case ArticleType.ArticleB.rawValue : + vc = storyboard.instantiateViewController(withIdentifier: "ViewControllerB") + break + case ArticleType.ArticleC.rawValue : + vc = storyboard.instantiateViewController(withIdentifier: "ViewControllerC") + break + default: break + } + + guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {completion(nil); return} + appDelegate.window?.addSubview(vc.view) + + completion(nil) + } + } + +} diff --git a/JsonExample/Json-Api-Example/Extensions.swift b/JsonExample/Json-Api-Example/Extensions.swift new file mode 100755 index 0000000..6751c87 --- /dev/null +++ b/JsonExample/Json-Api-Example/Extensions.swift @@ -0,0 +1,9 @@ +// +// Extensions.swift +// Json-Api-Example +// +// Created by Kruperfone on 19.11.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import Foundation diff --git a/JsonExample/Json-Api-Example/GVAligmentCollectionViewFlowLayout.h b/JsonExample/Json-Api-Example/GVAligmentCollectionViewFlowLayout.h new file mode 100755 index 0000000..891e7af --- /dev/null +++ b/JsonExample/Json-Api-Example/GVAligmentCollectionViewFlowLayout.h @@ -0,0 +1,30 @@ +// +// GVAligmentCollectionViewFlowLayout.h +// Json-Api-Example +// +// Created by Vladimir Goncharov on 05.12.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +#import + +typedef NS_ENUM(NSUInteger, GVAligmentCollectionViewFlowLayoutAligmentVertical) +{ + GVAligmentCollectionViewFlowLayoutAligmentVerticalTop, + GVAligmentCollectionViewFlowLayoutAligmentVerticalCenter, + GVAligmentCollectionViewFlowLayoutAligmentVerticalBottom +}; + +typedef NS_ENUM(NSUInteger, GVAligmentCollectionViewFlowLayoutAligmentHorizontal) +{ + GVAligmentCollectionViewFlowLayoutAligmentHorizontalLeft, + GVAligmentCollectionViewFlowLayoutAligmentHorizontalCenter, + GVAligmentCollectionViewFlowLayoutAligmentHorizontalRight +}; + +@interface GVAligmentCollectionViewFlowLayout : UICollectionViewFlowLayout + +@property (nonatomic, assign) GVAligmentCollectionViewFlowLayoutAligmentVertical verticalAligment; +@property (nonatomic, assign) GVAligmentCollectionViewFlowLayoutAligmentHorizontal horizontalAligment; + +@end diff --git a/JsonExample/Json-Api-Example/GVAligmentCollectionViewFlowLayout.m b/JsonExample/Json-Api-Example/GVAligmentCollectionViewFlowLayout.m new file mode 100755 index 0000000..5a1c846 --- /dev/null +++ b/JsonExample/Json-Api-Example/GVAligmentCollectionViewFlowLayout.m @@ -0,0 +1,53 @@ +// +// GVAligmentCollectionViewFlowLayout.m +// Json-Api-Example +// +// Created by Vladimir Goncharov on 05.12.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +#import "GVAligmentCollectionViewFlowLayout.h" + +@implementation GVAligmentCollectionViewFlowLayout + +- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{ + NSArray* attributesToReturn = [super layoutAttributesForElementsInRect:rect]; + for (UICollectionViewLayoutAttributes* attributes in attributesToReturn) { + if (nil == attributes.representedElementKind) { + NSIndexPath* indexPath = attributes.indexPath; + attributes.frame = [self layoutAttributesForItemAtIndexPath:indexPath].frame; + } + } + return attributesToReturn; +} + +- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { + UICollectionViewLayoutAttributes *currentItemAttributes = [super layoutAttributesForItemAtIndexPath:indexPath]; + +// switch (self.horizontalAligment) +// { +// case GVAligmentCollectionViewFlowLayoutAligmentHorizontalLeft: +// { +// return +// }; break; +// +// case GVAligmentCollectionViewFlowLayoutAligmentHorizontalCenter: +// { +// +// }; break; +// +// case GVAligmentCollectionViewFlowLayoutAligmentHorizontalRight: +// { +// +// }; break; +// +// default: +// break; +// } + currentItemAttributes.frame = CGRectOffset(currentItemAttributes.frame, 0, 0.5 * CGRectGetHeight(currentItemAttributes.frame)); + + return currentItemAttributes; +} + + +@end diff --git a/JsonExample/Json-Api-Example/Helpers.swift b/JsonExample/Json-Api-Example/Helpers.swift new file mode 100755 index 0000000..6e5630a --- /dev/null +++ b/JsonExample/Json-Api-Example/Helpers.swift @@ -0,0 +1,28 @@ +// +// Helpers.swift +// Json-Api-Example +// +// Created by Kruperfone on 19.11.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import Foundation + +enum JADateFormatter { + static let dayMonthYearDateFormatter:DateFormatter = { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "dd-MM-yyyy" + return dateFormatter + }() +} + +func ShowOKAlert (message: String?, onViewController viewController: UIViewController?) { + let alertView = UIAlertController(title: nil, message: message, preferredStyle: UIAlertControllerStyle.alert) + + let alertButton = UIAlertAction(title: "OK", style: .default) { (alertAction: UIAlertAction) -> Void in + alertView.dismiss(animated: true, completion: nil) + } + alertView.addAction(alertButton) + + viewController?.present(alertView, animated: true, completion: nil) +} diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Contents.json b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Contents.json new file mode 100755 index 0000000..0914624 --- /dev/null +++ b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Contents.json @@ -0,0 +1,44 @@ +{ + "images" : [ + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@2x-1.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@2x-1.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@2x-1.png new file mode 100755 index 0000000000000000000000000000000000000000..7baef82e8b826532968b51d10b692419e84ca22c GIT binary patch literal 9571 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 N002ovPDHLkV1iC_!*u`v literal 0 HcmV?d00001 diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@3x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..57e8bf5b32acfea1a0ffedbf77ea5dc071afd8e2 GIT binary patch literal 16349 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 literal 0 HcmV?d00001 diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@2x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..57e8bf5b32acfea1a0ffedbf77ea5dc071afd8e2 GIT binary patch literal 16349 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 literal 0 HcmV?d00001 diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@3x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..d5d185d5e1ec1954a8505c34ab7ad74a4d6dbdce GIT binary patch literal 27567 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 literal 0 HcmV?d00001 diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@3x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..d25d8ab74493e89665d2afc2271c42f00fd37907 GIT binary patch literal 10804 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 O0000 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 literal 0 HcmV?d00001 diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..675e5c27b02c4c59d59a878f8a2fef5fff0910dd GIT binary patch literal 4762 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 KMNUMnLSTX;-H&4c literal 0 HcmV?d00001 diff --git a/JsonExample/Json-Api-Example/Images.xcassets/Contents.json b/JsonExample/Json-Api-Example/Images.xcassets/Contents.json new file mode 100755 index 0000000..da4a164 --- /dev/null +++ b/JsonExample/Json-Api-Example/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1-1.png b/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1-1.png new file mode 100755 index 0000000000000000000000000000000000000000..0bb3463ea1d9011511de51f45bcd058f2ba5535e GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=#^NA%Cx&(BWL^R}MxHK?Asn*F zDG3Qb-amM7fZ@=$Z{HGT3F>gD$TZxL^J->2sN}Ioz|kadf&zzygW(MphBM4uzx9q* R^8s};c)I$ztaD0e0st*-BEbLv literal 0 HcmV?d00001 diff --git a/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1-2.png b/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1-2.png new file mode 100755 index 0000000000000000000000000000000000000000..0bb3463ea1d9011511de51f45bcd058f2ba5535e GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=#^NA%Cx&(BWL^R}MxHK?Asn*F zDG3Qb-amM7fZ@=$Z{HGT3F>gD$TZxL^J->2sN}Ioz|kadf&zzygW(MphBM4uzx9q* R^8s};c)I$ztaD0e0st*-BEbLv literal 0 HcmV?d00001 diff --git a/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1.png b/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1.png new file mode 100755 index 0000000000000000000000000000000000000000..0bb3463ea1d9011511de51f45bcd058f2ba5535e GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=#^NA%Cx&(BWL^R}MxHK?Asn*F zDG3Qb-amM7fZ@=$Z{HGT3F>gD$TZxL^J->2sN}Ioz|kadf&zzygW(MphBM4uzx9q* R^8s};c)I$ztaD0e0st*-BEbLv literal 0 HcmV?d00001 diff --git a/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Contents.json b/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Contents.json new file mode 100755 index 0000000..47fee9e --- /dev/null +++ b/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Artboard 1-1.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Artboard 1.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Artboard 1-2.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/JsonExample/Json-Api-Example/Info.plist b/JsonExample/Json-Api-Example/Info.plist new file mode 100755 index 0000000..ac91525 --- /dev/null +++ b/JsonExample/Json-Api-Example/Info.plist @@ -0,0 +1,97 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${BUNDLE_DISPLAY_NAME} + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + com.flatstack.Json-Api-Example + CFBundleURLSchemes + + DeepLink + + + + CFBundleVersion + 1 + Fabric + + APIKey + a58319df29eb3929f0ed864166f3c42deb476e66 + Kits + + + KitInfo + + KitName + Crashlytics + + + + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + httpbin.org + + NSIncludesSubdomains + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + NSTemporaryExceptionMinimumTLSVersion + TLSv1.1 + + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Authorization + UIRequiredDeviceCapabilities + + armv7 + + UIStatusBarStyle + UIStatusBarStyleLightContent + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + URL_HOST + ${URL_HOST} + + diff --git a/JsonExample/Json-Api-Example/JALoginViewController.swift b/JsonExample/Json-Api-Example/JALoginViewController.swift new file mode 100644 index 0000000..2ecbd97 --- /dev/null +++ b/JsonExample/Json-Api-Example/JALoginViewController.swift @@ -0,0 +1,166 @@ +// +// JALoginViewController.swift +// Timebox +// +// Created by Никита Асабин on 08.12.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + +import UIKit + +class JALoginViewController: UIViewController, FSKeyboardScrollSupport { + @IBOutlet weak var scrollView: UIScrollView! + @IBOutlet weak var loginTextField: UITextField! + @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var loginButtonVerticalConstraint: NSLayoutConstraint! + + @IBOutlet weak var activityIndicator: UIActivityIndicatorView! + + var fs_keyboardScrollSupportScrollView: UIScrollView? { + return self.scrollView + } + var tbViewController: UIViewController? { + return self + } + + var isLoginButtonVerticalConstraintUpdated = false + + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + self.fs_keyboardScrollSupportRemoveNotifications() + } + override func viewWillAppear(_ animated: Bool) { + super.viewDidAppear(animated) + self.fs_keyboardScrollSupportRegisterForNotifications() + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + self.checkScrollViewContentSize() + } + + func fs_keyboardScrollSupportRegisterForNotifications() { + let center = NotificationCenter.default + center.addObserver(self, selector: #selector(keyBoardWillShowWrapper(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) + center.addObserver(self, selector: #selector(keyBoardWillHideWrapper(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) + } + + func keyBoardWillShowWrapper(_ notif:Notification) { + self.fs_keyboardScrollSupportKeyboardWillShow(notif) + } + func keyBoardWillHideWrapper(_ notif:Notification) { + self.fs_keyboardScrollSupportKeyboardWillHide(notif) + } + + func checkScrollViewContentSize() { + if !self.isLoginButtonVerticalConstraintUpdated { + let screenHeight = UIScreen.main.bounds.height - 20 + if screenHeight<647 { + self.loginButtonVerticalConstraint.constant = screenHeight - (647 - self.loginButtonVerticalConstraint.constant) > 40 ? screenHeight - (647 - self.loginButtonVerticalConstraint.constant) : 40 + } + self.isLoginButtonVerticalConstraintUpdated = true + } + } + + @IBAction func didTapGesture(_ sender: Any) { + self.view.endEditing(true) + } + @IBAction func login(_ sender: Any) { + self.view.endEditing(true) + + let user = JAUserResourceForAuthorization() + user.password = self.passwordTextField.text + user.email = self.loginTextField.text + self.activityIndicator.startAnimating() + user.loginUser {[weak self] (resource) in + self?.activityIndicator.stopAnimating() + if resource != nil { + debugPrint(resource?.authentication_token ?? "Token: nil") + guard let lToken = resource?.authentication_token, let lEmail = resource?.email else {return} + JASpineManager.shared.setAuthorizationHeader(token:lToken) + JASpineManager.shared.setEmailHeader(email: lEmail) + self?.showToDosViewController() + + } else { + debugPrint("Failed") + ShowOKAlert(message: "Check Your email and password", onViewController: self) + } + } + } + + @IBAction func register(_ sender: Any) { + self.view.endEditing(true) + } + + + private func showToDosViewController() { + let lStoryboard = UIStoryboard.init(name: "Main", bundle: nil) + guard let vc = lStoryboard.instantiateInitialViewController() else {return} + self.show(vc, sender: self) + } + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} + +extension JALoginViewController { + + func fs_keyboardScrollSupportKeyboardWillShow (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + guard let info = notif.userInfo else {return} + guard let value = info[UIKeyboardFrameEndUserInfoKey] as? NSValue else {return} + + let keyboardFrame = value.cgRectValue + let contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardFrame.height, 0.0) + + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + + // If active text field is hidden by keyboard, scroll it so it's visible + // Your app might not need or want this behavior. + guard let activeField = self.fs_keyboardScrollSupportActiveField else {return} + + // By default activeField must be subview of the scrollView + guard let superview = activeField.superview else {return} + guard superview == scrollView else {return} + + var viewRect = self.view.frame + viewRect.size.height -= keyboardFrame.height + + let convertedRect = superview.convert(activeField.frame, to: self.view) + + if !viewRect.contains(convertedRect.origin) { + scrollView.scrollRectToVisible(activeField.frame, animated: true) + } + } + + func fs_keyboardScrollSupportKeyboardWillHide (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + let contentInsets = UIEdgeInsets.zero + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + } +} + diff --git a/JsonExample/Json-Api-Example/JARegistrationViewController.swift b/JsonExample/Json-Api-Example/JARegistrationViewController.swift new file mode 100644 index 0000000..3335e65 --- /dev/null +++ b/JsonExample/Json-Api-Example/JARegistrationViewController.swift @@ -0,0 +1,161 @@ +// +// JARegistrationViewController.swift +// Timebox +// +// Created by Никита Асабин on 09.12.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + +import UIKit + +class JARegistrationViewController: UIViewController,FSKeyboardScrollSupport { + @IBOutlet weak var scrollView: UIScrollView! + @IBOutlet weak var loginTextField: UITextField! + @IBOutlet weak var passwordTextField: UITextField! + + @IBOutlet weak var activityIndicator: UIActivityIndicatorView! + var fs_keyboardScrollSupportScrollView: UIScrollView? { + return self.scrollView + } + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + self.fs_keyboardScrollSupportRemoveNotifications() + } + override func viewWillAppear(_ animated: Bool) { + super.viewDidAppear(animated) + self.fs_keyboardScrollSupportRegisterForNotifications() + } + + func fs_keyboardScrollSupportRegisterForNotifications() { + let center = NotificationCenter.default + center.addObserver(self, selector: #selector(keyBoardWillShowWrapper(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) + center.addObserver(self, selector: #selector(keyBoardWillHideWrapper(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) + } + + func keyBoardWillShowWrapper(_ notif:Notification) { + self.fs_keyboardScrollSupportKeyboardWillShow(notif) + } + func keyBoardWillHideWrapper(_ notif:Notification) { + self.fs_keyboardScrollSupportKeyboardWillHide(notif) + } + + @IBAction func didTapGesture(_ sender: Any) { + self.view.endEditing(true) + } + + @IBAction func register(_ sender: Any) { + guard let email = self.loginTextField.text, let password = self.passwordTextField.text else {return} + + let user = JAUserResource() + user.password = password; + user.email = email; + self.activityIndicator.startAnimating() + user.registerUser {[weak self] (collection) in + if collection != nil { + self?.activityIndicator.stopAnimating() + self?.login(userCredentials: user) + } else { + self?.activityIndicator.stopAnimating() + ShowOKAlert(message: "Check Your email and password", onViewController: self) + } + } + } + + @IBAction func alreadyHaveLoginAndPassword(_ sender: Any) { + self.view.endEditing(true) + self.dismiss(animated: true, completion: nil) + } + + func login(userCredentials: JAUserResource) { + let user = JAUserResourceForAuthorization() + user.password = userCredentials.password + user.email = userCredentials.email + self.activityIndicator.startAnimating() + user.loginUser {[weak self] (resource) in + self?.activityIndicator.stopAnimating() + if resource != nil { + debugPrint(resource?.authentication_token ?? "Token: nil") + guard let lToken = resource?.authentication_token, let lEmail = resource?.email else {return} + JASpineManager.shared.setAuthorizationHeader(token:lToken) + JASpineManager.shared.setEmailHeader(email: lEmail) + self?.showToDosViewController() + + } else { + debugPrint("Failed") + ShowOKAlert(message: "Check Your email and password", onViewController: self) + } + } + } + + private func showToDosViewController() { + let lStoryboard = UIStoryboard.init(name: "Main", bundle: nil) + guard let vc = lStoryboard.instantiateInitialViewController() else {return} + self.show(vc, sender: self) + } + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} + +extension JARegistrationViewController { + + func fs_keyboardScrollSupportKeyboardWillShow (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + guard let info = notif.userInfo else {return} + guard let value = info[UIKeyboardFrameEndUserInfoKey] as? NSValue else {return} + + let keyboardFrame = value.cgRectValue + let contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardFrame.height, 0.0) + + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + + // If active text field is hidden by keyboard, scroll it so it's visible + // Your app might not need or want this behavior. + guard let activeField = self.fs_keyboardScrollSupportActiveField else {return} + + // By default activeField must be subview of the scrollView + guard let superview = activeField.superview else {return} + guard superview == scrollView else {return} + + var viewRect = self.view.frame + viewRect.size.height -= keyboardFrame.height + + let convertedRect = superview.convert(activeField.frame, to: self.view) + + if !viewRect.contains(convertedRect.origin) { + scrollView.scrollRectToVisible(activeField.frame, animated: true) + } + } + + func fs_keyboardScrollSupportKeyboardWillHide (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + let contentInsets = UIEdgeInsets.zero + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + } +} + diff --git a/JsonExample/Json-Api-Example/JASpineManager.swift b/JsonExample/Json-Api-Example/JASpineManager.swift new file mode 100644 index 0000000..86ba02c --- /dev/null +++ b/JsonExample/Json-Api-Example/JASpineManager.swift @@ -0,0 +1,82 @@ +// +// JASpineManager.swift +// Timebox +// +// Created by Никита Асабин on 13.12.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + +import UIKit +import Spine + +class JASpineManager: Spine { + + static let shared = JASpineManager() + + static let baseURL: URL = { + + #if TEST + return URL(string: "http://httpbin.org/")! + #else + guard let host = Bundle.main.infoDictionary!["URL_HOST"] as? String else { return URL(string: "")!} + return URL(string:host)! + #endif + + }() + + private convenience init() { + let sessionConfiguration = URLSessionConfiguration.default + sessionConfiguration.requestCachePolicy = .reloadIgnoringLocalCacheData + self.init(baseURL: JASpineManager.baseURL, networkClient: HTTPClient(session: URLSession(configuration: sessionConfiguration))) + +// self.setAuthorizationHeader(token: TBProfileManager.currentUser.token) +// self.setEmailHeader(email: TBProfileManager.currentUser.email) + } + + func setupSpine() { + Spine.setLogLevel(.debug, forDomain: .serializing) + Spine.setLogLevel(.debug, forDomain: .networking) + JASpineManager.shared.registerResource(JAUserResource.self) + JASpineManager.shared.registerResource(JAUserResourceForAuthorization.self) + + } + + func setAuthorizationHeader(token: String?) { + guard let lToken = token else { + (self.networkClient as! HTTPClient).setHeader("X-User-Token", to: "") + return + } + (self.networkClient as! HTTPClient).setHeader("X-User-Token", to: lToken) + debugPrint(lToken) + } + + func setEmailHeader(email: String?) { + guard let lEmail = email else { + (self.networkClient as! HTTPClient).setHeader("X-User-Email", to: "") + return + } + (self.networkClient as! HTTPClient).setHeader("X-User-Email", to: lEmail) + } +} + +class CustomRouter: JSONAPIRouter { + + override func queryItemForFilter(on key: String, value: Any?, operatorType: NSComparisonPredicate.Operator) -> URLQueryItem { + var stringValue = value ?? "null" + if let valueArray = value as? [String] { + stringValue = valueArray.joined(separator: ",") + return URLQueryItem(name: "filter[\(key)]", value: String(describing: stringValue)) + } else { + return URLQueryItem(name: "filter[\(key)]", value: String(describing: stringValue)) + } + } +} + +class CustomSpineManager: JASpineManager { + static let sharedWithCustomRouter:CustomSpineManager = { + let router = CustomRouter() + router.baseURL = CustomSpineManager.baseURL + return CustomSpineManager.init(router: router) + }() +} + diff --git a/JsonExample/Json-Api-Example/JAToDoResource.swift b/JsonExample/Json-Api-Example/JAToDoResource.swift new file mode 100644 index 0000000..46e9561 --- /dev/null +++ b/JsonExample/Json-Api-Example/JAToDoResource.swift @@ -0,0 +1,45 @@ +// +// JAToDoResource.swift +// Json-Api-Example +// +// Created by Никита Асабин on 3/24/17. +// Copyright © 2017 Flatstack. All rights reserved. +// + +import UIKit +import Spine + +class JAToDoResource: Resource { + var title: String? + var text: String? + var createdAt: Date? + var updatedAt: Date? + var status: String? + + + override class var resourceType:ResourceType { + return "todo-items" + } + + override class var fields:[Field] { + return fieldsFromDictionary([ + "title" : Attribute(), + "text" : Attribute(), + "createdAt" : DateAttribute().serializeAs("created-at"), + "updatedAt" : DateAttribute().serializeAs("updated-at"), + "status" : Attribute()]) + } +} + +extension JAToDoResource { + static func getToDosForCurrentUser(success: @escaping (ResourceCollection?)-> Void, failure: @escaping (SpineError?)-> Void) { + + JASpineManager.shared.findAll(JAToDoResource.self) + .onSuccess { (resources, meta, jsonapi) in + success(resources) + } + .onFailure { (error) in + failure(error) + } + } +} diff --git a/JsonExample/Json-Api-Example/JAToDoTableViewCell.swift b/JsonExample/Json-Api-Example/JAToDoTableViewCell.swift new file mode 100644 index 0000000..941afdc --- /dev/null +++ b/JsonExample/Json-Api-Example/JAToDoTableViewCell.swift @@ -0,0 +1,35 @@ +// +// JAToDoTableViewCell.swift +// Json-Api-Example +// +// Created by Никита Асабин on 3/30/17. +// Copyright © 2017 Flatstack. All rights reserved. +// + +import UIKit + +class JAToDoTableViewCell: UITableViewCell { + @IBOutlet weak var titleLabel: UILabel! + @IBOutlet weak var descriptionLabel: UILabel! + @IBOutlet weak var statusLabel: UILabel! + @IBOutlet weak var dateLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + + func configureCellWithTodo(toDo:JAToDoResource) { + self.titleLabel.text = toDo.title + self.descriptionLabel.text = toDo.text + self.statusLabel.text = toDo.status + guard let lDate = toDo.updatedAt else {return} + self.dateLabel.text = JADateFormatter.dayMonthYearDateFormatter.string(from: lDate) + } +} diff --git a/JsonExample/Json-Api-Example/JAToDoViewController.swift b/JsonExample/Json-Api-Example/JAToDoViewController.swift new file mode 100644 index 0000000..7a50664 --- /dev/null +++ b/JsonExample/Json-Api-Example/JAToDoViewController.swift @@ -0,0 +1,66 @@ +// +// JAToDoViewController.swift +// Json-Api-Example +// +// Created by Никита Асабин on 3/30/17. +// Copyright © 2017 Flatstack. All rights reserved. +// + +import UIKit +import Spine +class JAToDoViewController: UIViewController { + + @IBOutlet weak var tableView: UITableView! + @IBOutlet weak var activityIndicator: UIActivityIndicatorView! + + var toDoResourceCollection: ResourceCollection? + var toDoArray: [JAToDoResource] = [] + + override func viewDidLoad() { + super.viewDidLoad() + self.activityIndicator.hidesWhenStopped = true + self.activityIndicator.stopAnimating() + self.loadToDos() + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func loadToDos(){ + self.activityIndicator.startAnimating() + JAToDoResource.getToDosForCurrentUser(success: {[weak self] (collection) in + self?.activityIndicator.stopAnimating() + guard let lCollection = collection else {return} + self?.toDoResourceCollection = lCollection + guard let lTodosArray = lCollection.resources as? [JAToDoResource] else {return} + self?.toDoArray = lTodosArray + self?.tableView.reloadData() + + }) { [weak self](error) in + self?.activityIndicator.stopAnimating() + ShowOKAlert(message: error?.localizedDescription, onViewController: self) + } + } + + @IBAction func createToDo(_ sender: Any) { + } +} + +extension JAToDoViewController: UITableViewDelegate, UITableViewDataSource { + func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return toDoArray.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! JAToDoTableViewCell + cell.configureCellWithTodo(toDo: self.toDoArray[indexPath.row]) + return cell + } +} diff --git a/JsonExample/Json-Api-Example/JAUserResource.swift b/JsonExample/Json-Api-Example/JAUserResource.swift new file mode 100644 index 0000000..237f8d8 --- /dev/null +++ b/JsonExample/Json-Api-Example/JAUserResource.swift @@ -0,0 +1,67 @@ +// +// JAUserResource.swift +// Json-Api-Example +// +// Created by Никита Асабин on 3/24/17. +// Copyright © 2017 Flatstack. All rights reserved. +// + +import UIKit +import Spine + +class JAUserResource: Resource { + var email: String? + var password: String? + + override class var resourceType:ResourceType { + return "users" + } + + override class var fields:[Field] { + return fieldsFromDictionary([ + "email" : Attribute(), + "password" : Attribute()]) + } + +} + +extension JAUserResource { + func registerUser(completed: @escaping (Resource?) -> Void) { + JASpineManager.shared.save(self) + .onSuccess { (collection) in + completed(collection as? Resource) + } + .onFailure { (error) in + completed(nil) + } + } +} + + +class JAUserResourceForAuthorization:JAUserResource { + var authentication_token: String? + + override class var resourceType:ResourceType { + return "sessions" + } + override class var fields:[Field] { + return fieldsFromDictionary([ + "email" : Attribute(), + "password" : Attribute(), + "authentication_token" : Attribute().serializeAs("authentication-token") + ]) + } +} + +extension JAUserResourceForAuthorization { + func loginUser(completed: @escaping (JAUserResourceForAuthorization?) -> Void) { + + JASpineManager.shared.save(self) + .onSuccess { (collection) in + completed(collection as? JAUserResourceForAuthorization) + } + .onFailure { (error) in + completed(nil) + } + } +} diff --git a/JsonExample/Json-Api-Example/LaunchScreen.storyboard b/JsonExample/Json-Api-Example/LaunchScreen.storyboard new file mode 100755 index 0000000..d9d9ab6 --- /dev/null +++ b/JsonExample/Json-Api-Example/LaunchScreen.storyboard @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JsonExample/Json-Api-Example/Localization/Base.lproj/Localizable.strings b/JsonExample/Json-Api-Example/Localization/Base.lproj/Localizable.strings new file mode 100755 index 0000000..6cbb103 --- /dev/null +++ b/JsonExample/Json-Api-Example/Localization/Base.lproj/Localizable.strings @@ -0,0 +1,18 @@ +/* Localized versions of Info.plist keys */ + +/*------------Common-----------*/ +"ERROR" = "Error"; +"NO" = "No"; +"YES" = "Yes"; +"OK" = "Ok"; + +"ORDER" = "Order"; + +/*-------------API-----------*/ +"API_VERSION_DEPRECATED" = "The current API version deprecated"; +"OPERATION_WAS_CANCELLED" = "Operation was cancelled"; +"NOT_FOUND" = "Not found"; +"UNKNOW_ERROR" = "Unknow error"; + +//"" = ""; +// /*-------------CATEGORY-----------*/ diff --git a/JsonExample/Json-Api-Example/Localization/ru.lproj/Localizable.strings b/JsonExample/Json-Api-Example/Localization/ru.lproj/Localizable.strings new file mode 100755 index 0000000..1c25617 --- /dev/null +++ b/JsonExample/Json-Api-Example/Localization/ru.lproj/Localizable.strings @@ -0,0 +1,18 @@ +/* Localized versions of Info.plist keys */ + +/*------------Common-----------*/ +"ERROR" = "Ошибка"; +"NO" = "Нет"; +"YES" = "Да"; +"OK" = "Ок"; + +"ORDER" = "Заказ"; + +/*-------------API-----------*/ +"API_VERSION_DEPRECATED" = "Текущая версия API устарела"; +"OPERATION_WAS_CANCELLED" = "Операция была отменена"; +"NOT_FOUND" = "Не найдено"; +"UNKNOW_ERROR" = "Неизвестная ошибка"; + +//"" = ""; +// /*-------------CATEGORY-----------*/ diff --git a/JsonExample/Json-Api-Example/Main.storyboard b/JsonExample/Json-Api-Example/Main.storyboard new file mode 100644 index 0000000..744476d --- /dev/null +++ b/JsonExample/Json-Api-Example/Main.storyboard @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JsonExample/Json-Api-Example/Protocols.swift b/JsonExample/Json-Api-Example/Protocols.swift new file mode 100755 index 0000000..06d2e2f --- /dev/null +++ b/JsonExample/Json-Api-Example/Protocols.swift @@ -0,0 +1,9 @@ +// +// Protocols.swift +// Json-Api-Example +// +// Created by Kruperfone on 19.11.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import Foundation diff --git a/JsonExample/Json-Api-Example/Scripts/build.sh b/JsonExample/Json-Api-Example/Scripts/build.sh new file mode 100755 index 0000000..b2cea08 --- /dev/null +++ b/JsonExample/Json-Api-Example/Scripts/build.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xcodebuild -workspace Json-Api-Example.xcworkspace -scheme Production -sdk iphoneos -configuration Release OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty -c && exit ${PIPESTATUS[0]} diff --git a/JsonExample/Json-Api-Example/Scripts/mogend.sh b/JsonExample/Json-Api-Example/Scripts/mogend.sh new file mode 100755 index 0000000..9e332b9 --- /dev/null +++ b/JsonExample/Json-Api-Example/Scripts/mogend.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# mogend.sh +# +# Created by Jean-Denis Muys on 24/02/11. +# Modified by Ryan Rounkles on 15/5/11 to use correct model version and to account for spaces in file paths +# Modified by Vyacheslav Artemev on 7/12/11 to use separate folders for machine and human +# Modyfied by Danis Ziganshin on 14.02.14 for ARC compability + +# Check paths for generated files first! It can be different for every project +# If something wrong with paths on your machine - use absolute path for mogenerator script +# for enabling this script you should go to "Project target" -> "Build Rules" -> "Editor" -> "Add build Rule" -> select "Data model version files using Script" -> Process = "Data model version files" -> add custom script + #echo "Running mogend" + #"${SRCROOT}/ios-base/Scripts/mogend.sh" +# Set Output files = $(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.momd + +mogenerator --swift --model "${INPUT_FILE_PATH}/" --machine-dir "${PROJECT_DIR}/Json-Api-Example/CoreData/Private/" --human-dir "${PROJECT_DIR}/Json-Api-Example/CoreData/" --template-var arc=true + +${DEVELOPER_BIN_DIR}/momc -XD_MOMC_TARGET_VERSION=10.7 "${INPUT_FILE_PATH}" "${TARGET_BUILD_DIR}/${EXECUTABLE_FOLDER_PATH}/${INPUT_FILE_BASE}.momd" + +echo "Mogend.sh is done" \ No newline at end of file diff --git a/JsonExample/Json-Api-Example/Scripts/test.sh b/JsonExample/Json-Api-Example/Scripts/test.sh new file mode 100755 index 0000000..381ad29 --- /dev/null +++ b/JsonExample/Json-Api-Example/Scripts/test.sh @@ -0,0 +1,14 @@ +#!/bin/sh +xcodebuild -workspace Json-Api-Example.xcworkspace -scheme Staging -destination 'platform=iOS Simulator,name=iPhone 6,OS=8.1' test | xcpretty -c -t && exit ${PIPESTATUS[0]} + +#Available destinations for the "Staging" scheme: +#{ platform:iOS Simulator, id:9D4669A0-72AF-41A9-AB8A-14914D7A502F, OS:8.2, name:iPad 2 } +#{ platform:iOS Simulator, id:D1F3629A-4698-4DF4-813B-16E944D958C6, OS:8.2, name:iPad Air } +#{ platform:iOS Simulator, id:F16D6604-4C3C-46CF-B268-904093D42D28, OS:8.2, name:iPad Retina } +#{ platform:iOS Simulator, id:83BEC35E-D369-4CF5-BDB8-DB76DC1F1F1A, OS:8.2, name:iPhone 4s } +#{ platform:iOS Simulator, id:45F13142-6870-4DF5-AA02-DC5AB4549EDD, OS:8.2, name:iPhone 5 } +#{ platform:iOS Simulator, id:3A52861B-7E7A-43E8-9026-DFF899543071, OS:8.2, name:iPhone 5s } +#{ platform:iOS Simulator, id:2A8A340C-42BF-4045-B008-3868F8E082BA, OS:8.2, name:iPhone 6 Plus } +#{ platform:iOS Simulator, id:F651D749-67FD-4093-A9AE-C386E3858632, OS:8.2, name:iPhone 6 } +#{ platform:iOS Simulator, id:DB1FB84A-7F74-4042-B0E3-01B05B730FE7, OS:8.2, name:Resizable iPad } +#{ platform:iOS Simulator, id:90301A80-5A1B-4C4F-9433-D31A113FE314, OS:8.2, name:Resizable iPhone } diff --git a/JsonExample/Json-Api-Example/ViewController.swift b/JsonExample/Json-Api-Example/ViewController.swift new file mode 100755 index 0000000..7d2fd48 --- /dev/null +++ b/JsonExample/Json-Api-Example/ViewController.swift @@ -0,0 +1,30 @@ +// +// ViewController.swift +// Json-Api-Example +// +// Created by Kruperfone on 13.02.15. +// Copyright (c) 2015 Flatstack. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + @IBOutlet weak var label: UILabel! + + override func viewDidLoad() { + super.viewDidLoad() + + //Check if deep link is present. Must be in initial view controller + guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return} + appDelegate.triggerDeepLinkIfPresent() + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + } + + @IBAction func tapShowAlert(_ sender: AnyObject) { + UIAlertView(title: nil, message: "Press OK", delegate: nil, cancelButtonTitle: "OK").show() + } +} diff --git a/JsonExample/Json-Api-ExampleTests/FSTestHelpers.swift b/JsonExample/Json-Api-ExampleTests/FSTestHelpers.swift new file mode 100755 index 0000000..f7af8ba --- /dev/null +++ b/JsonExample/Json-Api-ExampleTests/FSTestHelpers.swift @@ -0,0 +1,42 @@ +// +// FSTestHelpers.swift +// Adme +// +// Created by Kruperfone on 21.09.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import Foundation + +enum TestingMode: String { + case Unit = "Unit" + case UI = "UI" + + init () { + let environments = ProcessInfo.processInfo.environment + guard let modeString = environments["Testing"] else { + fatalError("Testing mode not defined") + } + + switch modeString { + case TestingMode.Unit.rawValue: + self = .Unit + + case TestingMode.UI.rawValue: + self = .UI + + default: + fatalError("Testing mode is wrong") + } + } +} + +func HasLaunchArgument (_ argument: String) -> Bool { + let arguments = ProcessInfo.processInfo.arguments + return arguments.contains(argument) +} + +func GetEnvironment (_ key: String) -> String? { + let environments = ProcessInfo.processInfo.environment + return environments[key] +} diff --git a/JsonExample/Json-Api-ExampleTests/Info.plist b/JsonExample/Json-Api-ExampleTests/Info.plist new file mode 100755 index 0000000..ba72822 --- /dev/null +++ b/JsonExample/Json-Api-ExampleTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/JsonExample/Json-Api-ExampleTests/Swift_BaseTests.swift b/JsonExample/Json-Api-ExampleTests/Swift_BaseTests.swift new file mode 100755 index 0000000..4c94cf1 --- /dev/null +++ b/JsonExample/Json-Api-ExampleTests/Swift_BaseTests.swift @@ -0,0 +1,63 @@ +// +// Swift_BaseTests.swift +// Json-Api-ExampleTests +// +// Created by Kruperfone on 22.09.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import XCTest +@testable import Swift_Base + +class Swift_BaseTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +// func testPerformanceExample() { +// // This is an example of a performance test case. +// self.measureBlock { +// // Put the code you want to measure the time of here. +// } +// } + func testApiGetRequest() { + let expect = self.expectation(description:"completion handler called") + let manager = APIManager.sharedInstance.manager + let params = ["show_env":1] + _ = try! manager.API_GET("get", params: params as AnyObject? , success: { (task, response) in + print("Result: \(response)") + expect.fulfill() + }, failure: { (task, error) in + print("Error: \(error)") + }) + + waitForExpectations(timeout: 10, handler: nil) + + } + + func testApiPostRequest() { + let expect = self.expectation(description: "completion handler called") + let manager = APIManager.sharedInstance.manager + let params = ["show_env":1] + _ = try! manager.API_POST("post", params: params as AnyObject?, success: { (task, response) in + print("Result: \(response)") + expect.fulfill() + }, failure: { (operation, error) -> Void in + print("Error: \(error)") + }) + waitForExpectations(timeout: 10, handler: nil) + } + +} diff --git a/JsonExample/Json-Api-ExampleUITests/Info.plist b/JsonExample/Json-Api-ExampleUITests/Info.plist new file mode 100755 index 0000000..ba72822 --- /dev/null +++ b/JsonExample/Json-Api-ExampleUITests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/JsonExample/Json-Api-ExampleUITests/Swift_BaseUITests.swift b/JsonExample/Json-Api-ExampleUITests/Swift_BaseUITests.swift new file mode 100755 index 0000000..85b3319 --- /dev/null +++ b/JsonExample/Json-Api-ExampleUITests/Swift_BaseUITests.swift @@ -0,0 +1,45 @@ +// +// Swift_BaseUITests.swift +// Json-Api-ExampleUITests +// +// Created by Nikita Asabin on 12.01.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + + +@testable import Swift_Base + +import XCTest + +class Swift_BaseUITests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + let app = XCUIApplication() + app.launchEnvironment = ["Testing":"UI"] + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + app.launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + + let app = XCUIApplication() + app.buttons["Tap to show alert"].tap() + app.alerts.collectionViews.buttons["OK"].tap() + + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git a/JsonExample/LICENSE b/JsonExample/LICENSE new file mode 100755 index 0000000..3e36352 --- /dev/null +++ b/JsonExample/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Flatstack + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/JsonExample/Podfile b/JsonExample/Podfile new file mode 100755 index 0000000..27abcb8 --- /dev/null +++ b/JsonExample/Podfile @@ -0,0 +1,33 @@ +platform :ios, '8.2' +source 'https://github.com/CocoaPods/Specs.git' +use_frameworks! + + +abstract_target 'Abstract' do + pod 'FSHelpers+Swift', :git => 'https://github.com/fs/FSHelper.git' + + # Analytics + pod 'Fabric' + pod 'Crashlytics' + + # Libraries + pod 'Spine', :git => 'https://github.com/wvteijlingen/Spine.git' + + target 'Json-Api-Example' do + end + + target 'Json-Api-ExampleTests' do + end + + target 'Json-Api-ExampleUITests' do + end +end + +# Helpers + +#pod 'SDWebImage' +#pod 'NSDate-Extensions' +#pod 'Reachability' +#pod 'SVProgressHUD' +#pod 'SSKeychain' +#pod 'MKStoreKit' diff --git a/JsonExample/Podfile.lock b/JsonExample/Podfile.lock new file mode 100755 index 0000000..b930eb1 --- /dev/null +++ b/JsonExample/Podfile.lock @@ -0,0 +1,45 @@ +PODS: + - BrightFutures (5.1.0): + - Result (~> 3.0) + - Crashlytics (3.8.3): + - Fabric (~> 1.6.3) + - Fabric (1.6.10) + - FSHelpers+Swift (2.2) + - Result (3.2.1) + - Spine (0.3): + - BrightFutures (~> 5.0) + - SwiftyJSON (~> 3.1.4) + - SwiftyJSON (3.1.4) + +DEPENDENCIES: + - Crashlytics + - Fabric + - FSHelpers+Swift (from `https://github.com/fs/FSHelper.git`) + - Spine (from `https://github.com/wvteijlingen/Spine.git`) + +EXTERNAL SOURCES: + FSHelpers+Swift: + :git: https://github.com/fs/FSHelper.git + Spine: + :git: https://github.com/wvteijlingen/Spine.git + +CHECKOUT OPTIONS: + FSHelpers+Swift: + :commit: 835f7d730f142880439d27607f905125bf39fa0e + :git: https://github.com/fs/FSHelper.git + Spine: + :commit: bc82a5d7686bf663c8a37eb192423feaf0908f73 + :git: https://github.com/wvteijlingen/Spine.git + +SPEC CHECKSUMS: + BrightFutures: 62aafb1a63520eda91c9286bf4be33e58e043938 + Crashlytics: 2b6dbe138a42395577cfa73dfa1aa7248cadf39e + Fabric: c73f371ee543e3f0b80608f2674750e4910d1669 + FSHelpers+Swift: df9494a1d09ac433dcb3a88dcec6546a7a09c17b + Result: 2453a22e5c5b11c0c3a478736e82cd02f763b781 + Spine: 9a5076f732897dc67c0303b4b3d871cfee903efa + SwiftyJSON: c2842d878f95482ffceec5709abc3d05680c0220 + +PODFILE CHECKSUM: 3c9c22360f7d072a7f7439cf2ae0f9226f94fdd6 + +COCOAPODS: 1.1.1 diff --git a/JsonExample/README.md b/JsonExample/README.md new file mode 100755 index 0000000..a88f321 --- /dev/null +++ b/JsonExample/README.md @@ -0,0 +1,62 @@ +# ios-base-swift + +iOS swift template application. + +## Get started + +To setup project follow a few simple steps: + 1. [Download][1]. + 2. [Rename project][2]. + 3. [Configure mogenerator][3]. + 4. [Configure CocoaPods][4]. + 5. [Configure Fabrick/Crashlytics][5]. + 6. [Edit README.md][6]. + +### Download +Download prject as `zip` file. + +### Rename project +run `rename-project.command script` + +### Configure CocoaPods +* Find Podfile in project. +* Uncomment, add or remove pods. +* Then run in terminal: + +```sh +pod install +``` + +### Configure Fabric/Crashlytics +* Check **Bundle ID** in project build settings for all schemes. +* Create new organization in Fabric/Crashlytics. +* Add applications to this organization for all schemes. +* Do not forget change **Run Script** in settings of the project. + +### Edit README.md +* Edit `README.md`. + +## License +ios-base-swift is released under the MIT license. See [LICENSE][7] for details. + +## Credits + +iOS Base is maintained by [Nikita Fomin][8], [Sergey Nikolaev][9] and [Vladimir Goncharov][10]. +It was written by [Flatstack][11] with the help of our +[contributors][12]. + +[][13] + +[1]: #download +[2]: #rename-project +[3]: #configure-mogenerator +[4]: #configure-cocoapods +[5]: #configure-fabric-crashlytics +[6]: #edit-readme-md +[7]: LICENSE +[8]: http://github.com/nikitafomin +[9]: https://github.com/NikolaevSergey +[10]: https://github.com/VladimirGoncharov +[11]: http://www.flatstack.com +[12]: https://github.com/fs/ios-base-swift/graphs/contributors +[13]: http://www.flatstack.com diff --git a/JsonExample/generate_entities.sh b/JsonExample/generate_entities.sh new file mode 100755 index 0000000..703a880 --- /dev/null +++ b/JsonExample/generate_entities.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +PROJECT_NAME = "Json-Api-Example" +PATH = "$PWD/$PROJECT_NAME/CoreData" + +mogenerator --swift --model "$PATH/$PROJECT_NAME.xcdatamodeld" --machine-dir "$PATH/Private/" --human-dir "$PATH" + +sleep 3 \ No newline at end of file