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 0000000..7baef82 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@2x-1.png differ 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 0000000..57e8bf5 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@3x.png differ 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 0000000..57e8bf5 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@2x.png differ 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 0000000..d5d185d Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@3x.png differ diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@2x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@2x.png new file mode 100755 index 0000000..f203122 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@2x.png differ 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 0000000..d25d8ab Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@3x.png differ diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Contents.json b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100755 index 0000000..7b28cc5 --- /dev/null +++ b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.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.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.appiconset/Icon-40@2x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png new file mode 100755 index 0000000..cb65218 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png differ diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png new file mode 100755 index 0000000..6d6fd71 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png differ diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png new file mode 100755 index 0000000..6d6fd71 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png differ diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png new file mode 100755 index 0000000..bb4e123 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png differ 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 0000000..675e5c2 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png differ diff --git a/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png new file mode 100755 index 0000000..722b0e3 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png differ 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 0000000..0bb3463 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1-1.png differ 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 0000000..0bb3463 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1-2.png differ 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 0000000..0bb3463 Binary files /dev/null and b/JsonExample/Json-Api-Example/Images.xcassets/test.imageset/Artboard 1.png differ 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 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