diff --git a/.github/workflows/check-branch.yml b/.github/workflows/check-branch.yml index 1e2d24a..29d1579 100644 --- a/.github/workflows/check-branch.yml +++ b/.github/workflows/check-branch.yml @@ -1,4 +1,4 @@ -name: 'Check Branch' +name: "Check Branch" on: pull_request: @@ -8,13 +8,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Comment PR - if: github.base_ref == 'master' && github.head_ref != 'next' + if: github.base_ref == 'master' && github.head_ref != 'staging' uses: thollander/actions-comment-pull-request@v2 with: message: | - We regret to inform you that you are currently not able to merge your changes into the master branch due to restrictions applied by our SRE team. To proceed with merging your changes, we kindly request that you create a pull request from the next branch. Our team will then review the changes and work with you to ensure a successful merge into the master branch. + We regret to inform you that you are currently not able to merge your changes into the master branch due to restrictions applied by our SRE team. To proceed with merging your changes, we kindly request that you create a pull request from the staging branch. Our team will then review the changes and work with you to ensure a successful merge into the master branch. - name: Check branch - if: github.base_ref == 'master' && github.head_ref != 'next' + if: github.base_ref == 'master' && github.head_ref != 'staging' run: | - echo "ERROR: We regret to inform you that you are currently not able to merge your changes into the master branch due to restrictions applied by our SRE team. To proceed with merging your changes, we kindly request that you create a pull request from the next branch. Our team will then review the changes and work with you to ensure a successful merge into the master branch." - exit 1 \ No newline at end of file + echo "ERROR: We regret to inform you that you are currently not able to merge your changes into the master branch due to restrictions applied by our SRE team. To proceed with merging your changes, we kindly request that you create a pull request from the staging branch. Our team will then review the changes and work with you to ensure a successful merge into the master branch." + exit 1 diff --git a/.github/workflows/release-package.yml b/.github/workflows/release-package.yml index 5b606dd..8685083 100644 --- a/.github/workflows/release-package.yml +++ b/.github/workflows/release-package.yml @@ -24,7 +24,7 @@ jobs: - name: Build run: | # Add commands to build and test your package - xcodebuild -workspace Contentstack.xcworkspace -scheme 'Contentstack' -destination 'platform=iOS Simulator,name=iPhone 13 Pro' + xcodebuild -workspace Contentstack.xcworkspace -scheme 'Contentstack' -destination 'platform=iOS Simulator,name=iPhone 15' - name: CocoaPods trunk push run: pod trunk push --allow-warnings diff --git a/.talismanrc b/.talismanrc index 9fbcfe9..9dd8a3f 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,4 +1,8 @@ fileignoreconfig: - filename: Contentstack.xcodeproj/project.pbxproj - checksum: 331c4ff2e540e9495ff2a0d030ddd7f7c2eda077cb0b1a58c67fc2312b53658e -version: "" \ No newline at end of file + checksum: 10cb4bc5ca755f7392309a88cd6df510a45f8c527ea2f8edc71e1ae1fda60941 +- filename: .github/workflows/sast-scan.yml + checksum: 5554abc81d130557f52d64d253c3a23b41fcf0642a9c599131b2c185665ce581 +- filename: PrivacyInfo.xcprivacy + checksum: 7697fa6a0a5e0600d35d4678ffff9ef14c5dff5dc1613d37968de7ded3ff1fd0 +version: "" diff --git a/Contentstack.podspec b/Contentstack.podspec index 961aba1..a44cefc 100644 --- a/Contentstack.podspec +++ b/Contentstack.podspec @@ -4,7 +4,7 @@ s.version = '3.13.0' s.summary = 'Contentstack is a headless CMS with an API-first approach that puts content at the centre.' s.description = <<-DESC -Contentstack is a headless CMS with an API-first approach that puts content at the centre. It is designed to simplify the process of publication by separating code from content. +Contentstack is a headless CMS with an API-first approach that puts content at the centre. It is designed to simplify the process of publication by separating code from content. In a world where content is consumed via countless channels and form factors across mobile, web and IoT. Contentstack reimagines content management by decoupling code from content. Business users manage content – no training or development required. Developers can create cross-platform apps and take advantage of a headless CMS that delivers content through APIs. With an architecture that’s extensible – but without the bloat of legacy CMS – Contentstack cuts down on infrastructure, maintenance, cost and complexity. DESC diff --git a/Contentstack.xcodeproj/project.pbxproj b/Contentstack.xcodeproj/project.pbxproj index 6f5b3e3..757dc08 100644 --- a/Contentstack.xcodeproj/project.pbxproj +++ b/Contentstack.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -23,7 +23,6 @@ /* Begin PBXBuildFile section */ 0F41A91425C7CC9C007EF2DA /* ContentstackTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F41A91025C7CC9C007EF2DA /* ContentstackTest.m */; }; 0F41A91525C7CC9C007EF2DA /* SyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F41A91125C7CC9C007EF2DA /* SyncTest.m */; }; - 0F41A91625C7CC9C007EF2DA /* config.json in Resources */ = {isa = PBXBuildFile; fileRef = 0F41A91225C7CC9C007EF2DA /* config.json */; }; 0F9C0FB1221ADAC90091205A /* AssetLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F9C0F98221ADAC70091205A /* AssetLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0F9C0FB2221ADAC90091205A /* AssetLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F9C0F99221ADAC70091205A /* AssetLibrary.m */; }; 0F9C0FB3221ADAC90091205A /* Group.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F9C0F9A221ADAC70091205A /* Group.m */; }; @@ -50,10 +49,8 @@ 0F9C0FC8221ADAC90091205A /* NamespacedDependencies.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F9C0FB0221ADAC90091205A /* NamespacedDependencies.h */; }; 0FD6BAEF29CD6E73001A0930 /* CSURLSessionDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD6BAEE29CD6E73001A0930 /* CSURLSessionDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0FEAEF282361A18600985FF9 /* CSNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEAEF232361A18600985FF9 /* CSNetworking.h */; }; - 0FEAEF292361A18600985FF9 /* CSError.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEAEF242361A18600985FF9 /* CSError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FEAEF2A2361A18600985FF9 /* CSURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FEAEF252361A18600985FF9 /* CSURLSessionManager.m */; }; + 0FEAEF292361A18600985FF9 /* CSError.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEAEF242361A18600985FF9 /* CSError.h */; }; 0FEAEF2B2361A18600985FF9 /* CSURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FEAEF252361A18600985FF9 /* CSURLSessionManager.m */; }; - 0FEAEF2C2361A18600985FF9 /* CSError.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FEAEF262361A18600985FF9 /* CSError.m */; }; 0FEAEF2D2361A18600985FF9 /* CSError.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FEAEF262361A18600985FF9 /* CSError.m */; }; 0FEAEF2E2361A18600985FF9 /* CSURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEAEF272361A18600985FF9 /* CSURLSessionManager.h */; }; 230B38E41C16EB4400444A14 /* MMDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 565E11AA1BD76654005AD47F /* MMDocument.m */; }; @@ -96,7 +93,9 @@ 23A53F5A1E277CD3001DBE35 /* Contentstack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230B38C01C16E98B00444A14 /* Contentstack.framework */; }; 23B6F12A1B5662EE00A9E983 /* ISO8601DateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B6F1281B5662EE00A9E983 /* ISO8601DateFormatter.m */; }; 4714B7D42C5EAFCC004E941E /* Taxonomy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4714B7D32C5EAFCC004E941E /* Taxonomy.m */; }; + 473AFDB02CA22233002D331D /* config.json in Resources */ = {isa = PBXBuildFile; fileRef = 473AFDAF2CA22233002D331D /* config.json */; }; 479EC6642C5FCBDC00C5630B /* Taxonomy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4714B7D52C5EAFF5004E941E /* Taxonomy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52B4D90D9C31A30E438C5AF8 /* libPods-ContentstackTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EB1C6B5FF6A451CEB50B3A4 /* libPods-ContentstackTest.a */; }; 565E11BB1BD76654005AD47F /* MMDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 565E11AA1BD76654005AD47F /* MMDocument.m */; }; 565E11BC1BD76654005AD47F /* MMElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 565E11AD1BD76654005AD47F /* MMElement.m */; }; 565E11BD1BD76654005AD47F /* MMGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 565E11AF1BD76654005AD47F /* MMGenerator.m */; }; @@ -105,10 +104,10 @@ 565E11C01BD76654005AD47F /* MMParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 565E11B61BD76654005AD47F /* MMParser.m */; }; 565E11C11BD76654005AD47F /* MMScanner.m in Sources */ = {isa = PBXBuildFile; fileRef = 565E11B81BD76654005AD47F /* MMScanner.m */; }; 565E11C21BD76654005AD47F /* MMSpanParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 565E11BA1BD76654005AD47F /* MMSpanParser.m */; }; + 64B3EA282BF7C4AF009E0F38 /* libThirdPartyExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 238E841B1B4FE29A00BFDB32 /* libThirdPartyExtension.a */; }; 64F5220E2BF5C76E00AE6E0F /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 64F5220D2BF5C76E00AE6E0F /* PrivacyInfo.xcprivacy */; }; 64F5220F2BF5C76E00AE6E0F /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 64F5220D2BF5C76E00AE6E0F /* PrivacyInfo.xcprivacy */; }; - AC8EFB00BB10FD9E9347B36E /* libPods-ContentstackTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BF5BF157E2FBD4654225A01 /* libPods-ContentstackTest.a */; }; - F08A4E439D49C3F08DD8B39C /* libPods-Contentstack.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D36158266EF475AC2496807A /* libPods-Contentstack.a */; }; + E653FF942F28495541E9B22B /* libPods-Contentstack.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4514C6AB47DF26BA926C681A /* libPods-Contentstack.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -126,6 +125,20 @@ remoteGlobalIDString = 230B38BF1C16E98B00444A14; remoteInfo = Contentstack; }; + 64B3EA292BF7C4AF009E0F38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 23A0F84D1B3801D1003334E9 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 238E841A1B4FE29A00BFDB32; + remoteInfo = ThirdPartyExtension; + }; + 64F522152BF7C31900AE6E0F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 23A0F84D1B3801D1003334E9 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 238E841A1B4FE29A00BFDB32; + remoteInfo = ThirdPartyExtension; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -144,7 +157,6 @@ 0F0A70AD225DEDDF00E0284F /* Contentstack.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Contentstack.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 0F41A91025C7CC9C007EF2DA /* ContentstackTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContentstackTest.m; sourceTree = ""; }; 0F41A91125C7CC9C007EF2DA /* SyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SyncTest.m; sourceTree = ""; }; - 0F41A91225C7CC9C007EF2DA /* config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = config.json; sourceTree = ""; }; 0F6C89AC225CCE9F004C342A /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; 0F8745C5248FCE9700FAD159 /* run-test-case.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "run-test-case.sh"; sourceTree = ""; }; 0F9C0F98221ADAC70091205A /* AssetLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AssetLibrary.h; sourceTree = ""; }; @@ -178,7 +190,6 @@ 0FEAEF252361A18600985FF9 /* CSURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSURLSessionManager.m; sourceTree = ""; }; 0FEAEF262361A18600985FF9 /* CSError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSError.m; sourceTree = ""; }; 0FEAEF272361A18600985FF9 /* CSURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSURLSessionManager.h; sourceTree = ""; }; - 1BF5BF157E2FBD4654225A01 /* libPods-ContentstackTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ContentstackTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 230B38C01C16E98B00444A14 /* Contentstack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Contentstack.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 230B38C41C16E98B00444A14 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 238E841B1B4FE29A00BFDB32 /* libThirdPartyExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libThirdPartyExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -208,9 +219,10 @@ 23B6F1271B5662EE00A9E983 /* ISO8601DateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISO8601DateFormatter.h; sourceTree = ""; }; 23B6F1281B5662EE00A9E983 /* ISO8601DateFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ISO8601DateFormatter.m; sourceTree = ""; }; 23C545FB1C1976FE007BBD27 /* ios-build-framework-script.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "ios-build-framework-script.sh"; sourceTree = ""; }; - 3CF581B9F7526EDA48ED5C6F /* Pods-ContentstackTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ContentstackTest.debug.xcconfig"; path = "Target Support Files/Pods-ContentstackTest/Pods-ContentstackTest.debug.xcconfig"; sourceTree = ""; }; + 4514C6AB47DF26BA926C681A /* libPods-Contentstack.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Contentstack.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 4714B7D32C5EAFCC004E941E /* Taxonomy.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Taxonomy.m; sourceTree = ""; }; 4714B7D52C5EAFF5004E941E /* Taxonomy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Taxonomy.h; sourceTree = ""; }; + 473AFDAF2CA22233002D331D /* config.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = config.json; sourceTree = ""; }; 565E11A91BD76654005AD47F /* MMDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMDocument.h; sourceTree = ""; }; 565E11AA1BD76654005AD47F /* MMDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMDocument.m; sourceTree = ""; }; 565E11AB1BD76654005AD47F /* MMDocument_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMDocument_Private.h; sourceTree = ""; }; @@ -229,13 +241,13 @@ 565E11B81BD76654005AD47F /* MMScanner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMScanner.m; sourceTree = ""; }; 565E11B91BD76654005AD47F /* MMSpanParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMSpanParser.h; sourceTree = ""; }; 565E11BA1BD76654005AD47F /* MMSpanParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMSpanParser.m; sourceTree = ""; }; + 606DDA20A6F0593F40494FED /* Pods-ContentstackTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ContentstackTest.release.xcconfig"; path = "Target Support Files/Pods-ContentstackTest/Pods-ContentstackTest.release.xcconfig"; sourceTree = ""; }; + 609D1D72B25D2FBE4E26FA70 /* Pods-ContentstackTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ContentstackTest.debug.xcconfig"; path = "Target Support Files/Pods-ContentstackTest/Pods-ContentstackTest.debug.xcconfig"; sourceTree = ""; }; 64F5220D2BF5C76E00AE6E0F /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; - 852617AD67506289EC376E26 /* Pods-ContentstackTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ContentstackTest.release.xcconfig"; path = "Target Support Files/Pods-ContentstackTest/Pods-ContentstackTest.release.xcconfig"; sourceTree = ""; }; - 8A0C6846766D60DA3F50E989 /* Pods-Contentstack.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Contentstack.release.xcconfig"; path = "Target Support Files/Pods-Contentstack/Pods-Contentstack.release.xcconfig"; sourceTree = ""; }; + 7EB1C6B5FF6A451CEB50B3A4 /* libPods-ContentstackTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ContentstackTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8B7BE798B2EEFA3CC2763E3F /* Pods-Contentstack.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Contentstack.release.xcconfig"; path = "Target Support Files/Pods-Contentstack/Pods-Contentstack.release.xcconfig"; sourceTree = ""; }; 9980728A1E1BDC5000524FD3 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - D36158266EF475AC2496807A /* libPods-Contentstack.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Contentstack.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - F32D688A33248F4030DC4D01 /* libPods-ThirdPartyExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ThirdPartyExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - F80C908DA99E7A5AF5E1492D /* Pods-Contentstack.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Contentstack.debug.xcconfig"; path = "Target Support Files/Pods-Contentstack/Pods-Contentstack.debug.xcconfig"; sourceTree = ""; }; + ADFEA7B22B9D9042C8508BEC /* Pods-Contentstack.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Contentstack.debug.xcconfig"; path = "Target Support Files/Pods-Contentstack/Pods-Contentstack.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -243,7 +255,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F08A4E439D49C3F08DD8B39C /* libPods-Contentstack.a in Frameworks */, + 64B3EA282BF7C4AF009E0F38 /* libThirdPartyExtension.a in Frameworks */, + E653FF942F28495541E9B22B /* libPods-Contentstack.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -263,7 +276,7 @@ buildActionMask = 2147483647; files = ( 23A53F5A1E277CD3001DBE35 /* Contentstack.framework in Frameworks */, - AC8EFB00BB10FD9E9347B36E /* libPods-ContentstackTest.a in Frameworks */, + 52B4D90D9C31A30E438C5AF8 /* libPods-ContentstackTest.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -417,10 +430,10 @@ 23A53F561E277CD3001DBE35 /* ContentstackTest */ = { isa = PBXGroup; children = ( - 0F41A91225C7CC9C007EF2DA /* config.json */, 0F41A91025C7CC9C007EF2DA /* ContentstackTest.m */, 0F41A91125C7CC9C007EF2DA /* SyncTest.m */, 23A53F591E277CD3001DBE35 /* Info.plist */, + 473AFDAF2CA22233002D331D /* config.json */, ); path = ContentstackTest; sourceTree = ""; @@ -447,10 +460,10 @@ 4359F49C5FC059791ADEBE29 /* Pods */ = { isa = PBXGroup; children = ( - F80C908DA99E7A5AF5E1492D /* Pods-Contentstack.debug.xcconfig */, - 8A0C6846766D60DA3F50E989 /* Pods-Contentstack.release.xcconfig */, - 3CF581B9F7526EDA48ED5C6F /* Pods-ContentstackTest.debug.xcconfig */, - 852617AD67506289EC376E26 /* Pods-ContentstackTest.release.xcconfig */, + ADFEA7B22B9D9042C8508BEC /* Pods-Contentstack.debug.xcconfig */, + 8B7BE798B2EEFA3CC2763E3F /* Pods-Contentstack.release.xcconfig */, + 609D1D72B25D2FBE4E26FA70 /* Pods-ContentstackTest.debug.xcconfig */, + 606DDA20A6F0593F40494FED /* Pods-ContentstackTest.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -484,9 +497,8 @@ isa = PBXGroup; children = ( 0FDC02D1254A9CFA005EDDE3 /* libContentstackUtils.a */, - D36158266EF475AC2496807A /* libPods-Contentstack.a */, - F32D688A33248F4030DC4D01 /* libPods-ThirdPartyExtension.a */, - 1BF5BF157E2FBD4654225A01 /* libPods-ContentstackTest.a */, + 4514C6AB47DF26BA926C681A /* libPods-Contentstack.a */, + 7EB1C6B5FF6A451CEB50B3A4 /* libPods-ContentstackTest.a */, ); name = Frameworks; sourceTree = ""; @@ -513,6 +525,7 @@ 23A53F421E276C83001DBE35 /* NSObject+Extensions.h in Headers */, 0F9C0FBB221ADAC90091205A /* Stack.h in Headers */, 0FEAEF2E2361A18600985FF9 /* CSURLSessionManager.h in Headers */, + 0FEAEF292361A18600985FF9 /* CSError.h in Headers */, 0F9C0FBD221ADAC90091205A /* Asset.h in Headers */, 0F9C0FC5221ADAC90091205A /* ContentstackDefinitions.h in Headers */, 0F9C0FB7221ADAC90091205A /* Group.h in Headers */, @@ -524,7 +537,6 @@ 0FD6BAEF29CD6E73001A0930 /* CSURLSessionDelegate.h in Headers */, 0F9C0FB6221ADAC90091205A /* Config.h in Headers */, 0F9C0FC2221ADAC90091205A /* Query.h in Headers */, - 0FEAEF292361A18600985FF9 /* CSError.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -535,7 +547,7 @@ isa = PBXNativeTarget; buildConfigurationList = 230B38C71C16E98B00444A14 /* Build configuration list for PBXNativeTarget "Contentstack" */; buildPhases = ( - F8017163DC4800D53D3ACF35 /* [CP] Check Pods Manifest.lock */, + E842C50159FE4EC54096AF7A /* [CP] Check Pods Manifest.lock */, 230B38BB1C16E98B00444A14 /* Sources */, 230B38BC1C16E98B00444A14 /* Frameworks */, 230B38BD1C16E98B00444A14 /* Headers */, @@ -546,6 +558,8 @@ ); dependencies = ( 230B39171C1709F800444A14 /* PBXTargetDependency */, + 64F522162BF7C31900AE6E0F /* PBXTargetDependency */, + 64B3EA2A2BF7C4AF009E0F38 /* PBXTargetDependency */, ); name = Contentstack; productName = Contentstack; @@ -574,7 +588,7 @@ isa = PBXNativeTarget; buildConfigurationList = 23A53F5D1E277CD3001DBE35 /* Build configuration list for PBXNativeTarget "ContentstackTest" */; buildPhases = ( - 0F741250694A9A3D4526B005 /* [CP] Check Pods Manifest.lock */, + 1B97C12ADAAEE6109C952A57 /* [CP] Check Pods Manifest.lock */, 23A53F511E277CD3001DBE35 /* Sources */, 23A53F521E277CD3001DBE35 /* Frameworks */, 23A53F531E277CD3001DBE35 /* Resources */, @@ -595,7 +609,8 @@ 23A0F84D1B3801D1003334E9 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1540; ORGANIZATIONNAME = Contentstack; TargetAttributes = { 230B38BF1C16E98B00444A14 = { @@ -606,7 +621,6 @@ }; 23A53F541E277CD3001DBE35 = { CreatedOnToolsVersion = 8.2; - DevelopmentTeam = 32QM644P7J; ProvisioningStyle = Automatic; }; 23A8E71C1B70C872002F13C9 = { @@ -649,14 +663,14 @@ buildActionMask = 2147483647; files = ( 64F5220F2BF5C76E00AE6E0F /* PrivacyInfo.xcprivacy in Resources */, - 0F41A91625C7CC9C007EF2DA /* config.json in Resources */, + 473AFDB02CA22233002D331D /* config.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0F741250694A9A3D4526B005 /* [CP] Check Pods Manifest.lock */ = { + 1B97C12ADAAEE6109C952A57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -719,7 +733,7 @@ shellPath = /bin/sh; shellScript = "${PROJECT_DIR}/Script/ios-build-framework-script.sh\n"; }; - F8017163DC4800D53D3ACF35 /* [CP] Check Pods Manifest.lock */ = { + E842C50159FE4EC54096AF7A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -801,8 +815,6 @@ 565E11BB1BD76654005AD47F /* MMDocument.m in Sources */, 565E11C01BD76654005AD47F /* MMParser.m in Sources */, 565E11C21BD76654005AD47F /* MMSpanParser.m in Sources */, - 0FEAEF2A2361A18600985FF9 /* CSURLSessionManager.m in Sources */, - 0FEAEF2C2361A18600985FF9 /* CSError.m in Sources */, 23B6F12A1B5662EE00A9E983 /* ISO8601DateFormatter.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -829,22 +841,36 @@ target = 230B38BF1C16E98B00444A14 /* Contentstack */; targetProxy = 23A53F5B1E277CD3001DBE35 /* PBXContainerItemProxy */; }; + 64B3EA2A2BF7C4AF009E0F38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 238E841A1B4FE29A00BFDB32 /* ThirdPartyExtension */; + targetProxy = 64B3EA292BF7C4AF009E0F38 /* PBXContainerItemProxy */; + }; + 64F522162BF7C31900AE6E0F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 238E841A1B4FE29A00BFDB32 /* ThirdPartyExtension */; + targetProxy = 64F522152BF7C31900AE6E0F /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 230B38C51C16E98B00444A14 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F80C908DA99E7A5AF5E1492D /* Pods-Contentstack.debug.xcconfig */; + baseConfigurationReference = ADFEA7B22B9D9042C8508BEC /* Pods-Contentstack.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/ThirdPartyExtension/**", @@ -852,9 +878,14 @@ GCC_PREFIX_HEADER = ./Contentstack/ThirdPartyNamespaceHeader/NamespacedDependencies.h; INFOPLIST_FILE = Contentstack/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MACH_O_TYPE = staticlib; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11"; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; OTHER_LDFLAGS = "$(inherited)"; @@ -865,25 +896,35 @@ }; 230B38C61C16E98B00444A14 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8A0C6846766D60DA3F50E989 /* Pods-Contentstack.release.xcconfig */; + baseConfigurationReference = 8B7BE798B2EEFA3CC2763E3F /* Pods-Contentstack.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/ThirdPartyExtension/**", + "@executable_path/Frameworks", + "@loader_path/Frameworks", ); GCC_PREFIX_HEADER = ./Contentstack/ThirdPartyNamespaceHeader/NamespacedDependencies.h; INFOPLIST_FILE = Contentstack/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MACH_O_TYPE = staticlib; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11"; OTHER_CFLAGS = ""; OTHER_LDFLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = com.contentstack.com; @@ -894,6 +935,7 @@ 238E842D1B4FE29A00BFDB32 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + DEAD_CODE_STRIPPING = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/ThirdPartyExtension", @@ -912,6 +954,7 @@ 238E842E1B4FE29A00BFDB32 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + DEAD_CODE_STRIPPING = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/ThirdPartyExtension", @@ -927,26 +970,38 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; BITCODE_GENERATION_MODE = marker; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = NO; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -962,9 +1017,9 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; + ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-fembed-bitcode-marker"; OTHER_LDFLAGS = "-fembed-bitcode"; PRODUCT_MODULE_NAME = Contentstack; @@ -982,27 +1037,38 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; BITCODE_GENERATION_MODE = bitcode; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = NO; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1011,7 +1077,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = "-fembed-bitcode"; @@ -1029,24 +1095,34 @@ }; 23A53F5E1E277CD3001DBE35 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3CF581B9F7526EDA48ED5C6F /* Pods-ContentstackTest.debug.xcconfig */; + baseConfigurationReference = 609D1D72B25D2FBE4E26FA70 /* Pods-ContentstackTest.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; CLANG_WARN_SUSPICIOUS_MOVE = YES; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 32QM644P7J; + DEVELOPMENT_TEAM = A28ZYDWQ3M; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; INFOPLIST_FILE = ContentstackTest/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-ObjC"; + OTHER_LDFLAGS = ( + "-ObjC", + "-Wno-quoted-include-in-framework-header", + ); PRODUCT_BUNDLE_IDENTIFIER = com.contentstack.comtest; PRODUCT_NAME = "$(TARGET_NAME)"; }; @@ -1054,21 +1130,31 @@ }; 23A53F5F1E277CD3001DBE35 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 852617AD67506289EC376E26 /* Pods-ContentstackTest.release.xcconfig */; + baseConfigurationReference = 606DDA20A6F0593F40494FED /* Pods-ContentstackTest.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; CLANG_WARN_SUSPICIOUS_MOVE = YES; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = 32QM644P7J; + DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_TEAM = A28ZYDWQ3M; ENABLE_BITCODE = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; INFOPLIST_FILE = ContentstackTest/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-ObjC"; + OTHER_LDFLAGS = ( + "-ObjC", + "-Wno-quoted-include-in-framework-header", + ); PRODUCT_BUNDLE_IDENTIFIER = com.contentstack.comtest; PRODUCT_NAME = "$(TARGET_NAME)"; }; @@ -1077,6 +1163,7 @@ 23A8E71D1B70C872002F13C9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + DEAD_CODE_STRIPPING = YES; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1086,6 +1173,7 @@ 23A8E71E1B70C872002F13C9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + DEAD_CODE_STRIPPING = YES; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/Contentstack.xcodeproj/xcshareddata/xcschemes/Contentstack.xcscheme b/Contentstack.xcodeproj/xcshareddata/xcschemes/Contentstack.xcscheme index 1e04b4c..07e34ac 100644 --- a/Contentstack.xcodeproj/xcshareddata/xcschemes/Contentstack.xcscheme +++ b/Contentstack.xcodeproj/xcshareddata/xcschemes/Contentstack.xcscheme @@ -1,6 +1,6 @@ -#import "ContentstackDefinitions.h" +#import BUILT_ASSUME_NONNULL_BEGIN diff --git a/Contentstack/AssetLibrary.h b/Contentstack/AssetLibrary.h index f695796..eaa7d81 100644 --- a/Contentstack/AssetLibrary.h +++ b/Contentstack/AssetLibrary.h @@ -7,7 +7,7 @@ // #import -#import "ContentstackDefinitions.h" +#import BUILT_ASSUME_NONNULL_BEGIN @@ -230,6 +230,24 @@ typedef NS_ENUM(NSUInteger, OrderBy) { */ - (void)fetchAll:(void (^) (ResponseType type,NSArray * BUILT_NULLABLE_P result,NSError * BUILT_NULLABLE_P error))completionBlock; + +/** + This method fetches assets using other fields than UID.. + + //Obj-C + [assetLib where:(NSString *)field equalTo:(NSObject *)value]; + + //Swift + assetLib.where("fieldName","value"); + + This allows filtering assets by specifying the field name and the value to match. + @param field The name of the field to filter by. + @param value The value that the field should match. + */ +- (void)where:(NSString *)field equalTo:(NSObject *)value ; + +- (NSDictionary*)getPostParamDictionary; + @end BUILT_ASSUME_NONNULL_END diff --git a/Contentstack/AssetLibrary.m b/Contentstack/AssetLibrary.m index 990ba5e..4a861d0 100644 --- a/Contentstack/AssetLibrary.m +++ b/Contentstack/AssetLibrary.m @@ -156,6 +156,25 @@ - (void)cancelRequest { [self.requestOperation cancel]; } } +// MARK: - Where Query - +- (NSDictionary*) getPostParamDictionary { + return [self.postParamDictionary copy]; +} + +- (void)where:(NSString *)field equalTo:(NSObject *)value { + if (field.length == 0 || !value) { + NSLog(@"Field or value cannot be empty"); + return; + } + NSMutableDictionary *queryDict = [NSMutableDictionary dictionary]; + NSDictionary *existingQuery = self.postParamDictionary[@"query"]; + // If an existing query exists, merge it + if (existingQuery) { + [queryDict addEntriesFromDictionary:existingQuery]; + } + queryDict[field] = value; + [self.postParamDictionary setObject:queryDict forKey:@"query"]; +} @end diff --git a/Contentstack/Config.h b/Contentstack/Config.h index a1e20df..b828898 100755 --- a/Contentstack/Config.h +++ b/Contentstack/Config.h @@ -7,8 +7,8 @@ // #import -#import "ContentstackDefinitions.h" -#import "CSURLSessionDelegate.h" +#import +#import @interface Config : NSObject /**---------------------------------------------------------------------------------------- @@ -88,4 +88,27 @@ */ @property (nullable, retain) id delegate; + + +/** + Early access features + + //Obj-C + Config *config = [[Config alloc] init]; + [config setEarlyAccess:@[@"Taxonomy", @"Teams", @"Terms", @"LivePreview"]]; + + //Swift + let config = Config() + config.setEarlyAccess(["Taxonomy", "Teams", "Terms", "LivePreview"]) + + */ +@property (nonatomic, strong, nullable) NSArray *setEarlyAccess; + + +/** + Set early access features + + @param setearlyAccess An array of early access feature names + */ +- (NSDictionary *)earlyAccessHeaders; @end diff --git a/Contentstack/Config.m b/Contentstack/Config.m index 2a42703..1dbde51 100755 --- a/Contentstack/Config.m +++ b/Contentstack/Config.m @@ -15,7 +15,8 @@ -(instancetype)init { if (self) { _region = US; _host = @"cdn.contentstack.io"; - _version = kCSIO_ApiVersion; + _version = kCSIO_ApiVersion; + _setEarlyAccess = nil; } return self; } @@ -25,4 +26,11 @@ - (void)setRegion:(ContentstackRegion)region { _host = [self hostURL:_region]; } } +- (NSDictionary *)earlyAccessHeaders { + if (_setEarlyAccess.count > 0) { + NSString *earlyAccessString = [_setEarlyAccess componentsJoinedByString:@","]; + return @{@"x-header-ea": earlyAccessString}; + } + return @{}; +} @end diff --git a/Contentstack/ContentType.h b/Contentstack/ContentType.h index 6b3af66..99856c5 100644 --- a/Contentstack/ContentType.h +++ b/Contentstack/ContentType.h @@ -7,7 +7,7 @@ // #import -#import "ContentstackDefinitions.h" +#import @class Entry; @class Query; diff --git a/Contentstack/Entry.h b/Contentstack/Entry.h index 2eacbf2..3891135 100644 --- a/Contentstack/Entry.h +++ b/Contentstack/Entry.h @@ -7,7 +7,7 @@ // #import -#import "ContentstackDefinitions.h" +#import @class Asset; @class Group; @@ -87,6 +87,10 @@ BUILT_ASSUME_NONNULL_BEGIN * Readonly property to check deletedBy of entry */ @property (nonatomic, copy, readonly) NSString *deletedBy; +/** + * Readonly property to check deletedBy of entry + */ +@property (nonatomic, copy, readonly) NSMutableDictionary *localHeaders; /** @@ -124,6 +128,36 @@ BUILT_ASSUME_NONNULL_BEGIN */ - (void)setHeader:(NSString *)headerValue forKey:(NSString *)headerKey; +/** + Set a single variant uid as header + + //'API_KEY' is a ENVIRONMENT Stack API key + + //Obj-C + [entryObj variantUid:@"variantUid"]; + + //Swift + entryObj.variantUid("variantUid") + + @param variantUid The variant uid + */ +- (void)variantUid:(NSString *)variantUid; + +/** + Set multiple variant uids as header + + //'API_KEY' is a ENVIRONMENT Stack API key + + //Obj-C + [entryObj variantUids:@["variant1", "variant2"]]; + + //Swift + entryObj.setHeader(["variant1", "variant2"]) + + @param variantUids The variant uids + */ +- (void)variantUids:(NSArray *)variantUids; + /** Set a header for Entry diff --git a/Contentstack/Entry.m b/Contentstack/Entry.m index 885a46d..bead34f 100644 --- a/Contentstack/Entry.m +++ b/Contentstack/Entry.m @@ -82,6 +82,17 @@ - (void)setHeader:(NSString *)headerValue forKey:(NSString *)headerKey { [self.localHeaders setObject:headerValue forKey:headerKey]; } +- (void)variantUid:(NSString *)variantUid { + NSString *key = @"x-cs-variant-uid"; + [self.localHeaders setObject:variantUid forKey: key]; +} + +- (void)variantUids:(NSArray *)variantUids { + NSString *key = @"x-cs-variant-uid"; + NSString *joinedString = [variantUids componentsJoinedByString:@","]; + [self.localHeaders setObject:joinedString forKey: key]; +} + - (void)addHeadersWithDictionary:(NSDictionary *)headers { [headers enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [self.localHeaders setObject:obj forKey:key]; diff --git a/Contentstack/Group.h b/Contentstack/Group.h index c31600f..19ea37c 100755 --- a/Contentstack/Group.h +++ b/Contentstack/Group.h @@ -7,7 +7,7 @@ // #import -#import "ContentstackDefinitions.h" +#import @class Asset; diff --git a/Contentstack/Query.h b/Contentstack/Query.h index e8827e1..d96e15e 100644 --- a/Contentstack/Query.h +++ b/Contentstack/Query.h @@ -7,7 +7,7 @@ // #import -#import "ContentstackDefinitions.h" +#import @class QueryResult; @class Entry; diff --git a/Contentstack/QueryResult.h b/Contentstack/QueryResult.h index 8f80236..f981401 100755 --- a/Contentstack/QueryResult.h +++ b/Contentstack/QueryResult.h @@ -7,7 +7,7 @@ // #import -#import "ContentstackDefinitions.h" +#import BUILT_ASSUME_NONNULL_BEGIN diff --git a/Contentstack/QueryResult.m b/Contentstack/QueryResult.m index 968e7b7..6e20e5c 100755 --- a/Contentstack/QueryResult.m +++ b/Contentstack/QueryResult.m @@ -69,7 +69,10 @@ - (NSInteger)totalCount { // if condition is fix for value of "entries" key ie.array inside array in response JSON if (objectsArray.firstObject && [objectsArray.firstObject isKindOfClass:[NSDictionary class]]) { [objectsArray enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) { - Entry *formEntry = [self.taxonomy entry]; + Entry *formEntry = [self.contentType entry]; + if (formEntry == NULL) { + formEntry = [self.taxonomy entry]; + } [formEntry configureWithDictionary:obj]; [entryObjects addObject:formEntry]; }]; diff --git a/Contentstack/Stack.h b/Contentstack/Stack.h index b92ffb7..08fdad6 100644 --- a/Contentstack/Stack.h +++ b/Contentstack/Stack.h @@ -7,7 +7,7 @@ // #import -#import "ContentstackDefinitions.h" +#import @class Config; @class ContentType; @@ -68,6 +68,8 @@ BUILT_ASSUME_NONNULL_BEGIN - (Taxonomy *)taxonomy; +- (NSDictionary *)getHeaders; + //MARK: - Manually set headers /**--------------------------------------------------------------------------------------- * @name Manually set headers diff --git a/Contentstack/Stack.m b/Contentstack/Stack.m index ec23d84..edb1163 100644 --- a/Contentstack/Stack.m +++ b/Contentstack/Stack.m @@ -47,6 +47,11 @@ - (instancetype)initWithAPIKey:(NSString*)apiKey andaccessToken:(NSString *)acce _commonDateFormatter.includeTime = YES; _requestOperationSet = [NSMutableSet set]; + // Add early access headers only if they exist + NSDictionary *earlyAccessHeaders = [_config earlyAccessHeaders]; + if (earlyAccessHeaders.count > 0) { + [_stackHeaders addEntriesFromDictionary:earlyAccessHeaders]; + } [self setHeader:_apiKey forKey:kCSIO_SiteApiKey]; @@ -128,6 +133,10 @@ - (void)removeHeaderForKey:(NSString *)headerKey { } } +- (NSDictionary *)getHeaders { + return [self.stackHeaders copy]; +} + - (NSString *)imageTransformWithUrl:(NSString *)url andParams:(NSDictionary *)params{ if([url rangeOfString:@"?" options:NSCaseInsensitiveSearch].length==0) { url = [url stringByAppendingString:@"?"]; diff --git a/Contentstack/Taxonomy.h b/Contentstack/Taxonomy.h index f649978..8ed63ff 100644 --- a/Contentstack/Taxonomy.h +++ b/Contentstack/Taxonomy.h @@ -7,7 +7,7 @@ // #import -#import "ContentstackDefinitions.h" +#import @class Query; diff --git a/ContentstackTest/ContentstackTest.m b/ContentstackTest/ContentstackTest.m index ef4c109..ae88d95 100644 --- a/ContentstackTest/ContentstackTest.m +++ b/ContentstackTest/ContentstackTest.m @@ -119,6 +119,61 @@ - (void)tearDown { #pragma mark Test Case - Header +- (void)testStackHeadersEarlyAccess { + XCTestExpectation *expectation = [self expectationWithDescription:@"EarlyAccessHeadersPassed"]; + config = [[Config alloc] init]; + config.setEarlyAccess = @[@"Taxonomy", @"Teams", @"Terms", @"LivePreview"]; + csStack = [Contentstack stackWithAPIKey:@"apikey" accessToken:@"delivery_token" environmentName:@"environment" config:config]; + // Check the headers in the stack + NSDictionary *headers = [csStack getHeaders]; + // Check if the early access headers are set correctly + NSString *expectedHeaderValue = @"Taxonomy,Teams,Terms,LivePreview"; + NSString *earlyAccessHeader = headers[@"x-header-ea"]; + + XCTAssertNotNil(earlyAccessHeader, @"Early access header should be present"); + XCTAssertEqualObjects(earlyAccessHeader, expectedHeaderValue, @"Early access header should match the expected value"); + + // Fulfill the expectation to mark the test as completed + [expectation fulfill]; + + // Wait for the request to complete + [self waitForExpectationsWithTimeout:kRequestTimeOutInSeconds handler:^(NSError *error) { + if (error) { + XCTFail(@"Test timed out: %@", error.localizedDescription); + } + }]; +} + +- (void)testNoEarlyAccessHeaders { + XCTestExpectation *expectation = [self expectationWithDescription:@"NoEarlyAccessHeaders"]; + config = [[Config alloc] init]; + csStack = [Contentstack stackWithAPIKey:@"apikey" accessToken:@"delivery_token" environmentName:@"environment" config:config]; + + NSDictionary *headers = [csStack getHeaders]; + NSString *earlyAccessHeader = headers[@"x-header-ea"]; + XCTAssertNil(earlyAccessHeader, @"Early access header should not be present when no early access features are set"); + + [expectation fulfill]; + [self waitForExpectationsWithTimeout:kRequestTimeOutInSeconds handler:nil]; +} + +- (void)testSingleEarlyAccessHeader { + XCTestExpectation *expectation = [self expectationWithDescription:@"SingleEarlyAccessHeader"]; + config = [[Config alloc] init]; + config.setEarlyAccess = @[@"LivePreview"]; + csStack = [Contentstack stackWithAPIKey:@"apikey" accessToken:@"delivery_token" environmentName:@"environment" config:config]; + + NSDictionary *headers = [csStack getHeaders]; + NSString *expectedHeaderValue = @"LivePreview"; + NSString *earlyAccessHeader = headers[@"x-header-ea"]; + XCTAssertNotNil(earlyAccessHeader, @"Early access header should be present"); + XCTAssertEqualObjects(earlyAccessHeader, expectedHeaderValue, @"Single early access header should match the expected value"); + + [expectation fulfill]; + [self waitForExpectationsWithTimeout:kRequestTimeOutInSeconds handler:nil]; +} + + - (void)test01FetchSourceEntries { XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch All Entries"]; @@ -203,6 +258,88 @@ - (void)test04FetchAssets { [self waitForRequest]; } +- (void)testFetchAssetByQuery01{ + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By where method"]; + AssetLibrary* assets = [csStack assetLibrary]; + [assets where:@"title" equalTo:@"image1"]; + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + if (error) { + XCTFail(@"~ ERR: %@, Message = %@", error.userInfo, error.description); + } else { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssert(result.count > 0, @"Expected results, but got none."); + } + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByValidFileSize02 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By valid file size"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"file_size" equalTo:@(53986)]; // Valid file size + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssert(result.count > 0, @"Expected results, but got none."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByNonExistentFileSize03 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By non-existent file size"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"file_size" equalTo:@(9999999)]; // Non-existent file size + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssertEqual(result.count, 0, @"Expected no results, but got some."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByNonExistentTitle04 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By non-existent title"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"title" equalTo:@"non-existent-title.png"]; // Non-existent title + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssertEqual(result.count, 0, @"Expected no results, but got some."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByMultipleConditions05 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By multiple conditions"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"file_size" equalTo:@(6884)]; // Valid file size + [assets where:@"title" equalTo:@"image4"]; // Valid title + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssert(result.count > 0, @"Expected results, but got none."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByInvalidFieldName06 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By invalid field name"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"invalid_field" equalTo:@"value"]; // Invalid field name + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssertEqual(result.count, 0, @"Expected no results."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} - (void)testGetHeader { XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Set Header"]; @@ -275,31 +412,31 @@ -(void)testKVOEntryProperties { } --(void)testKVOEntryForGroup { - - XCTestExpectation *expectation = [self expectationWithDescription:@"KVO on Properties"]; - ContentType* csForm = [csStack contentTypeWithName:@"modular_block"]; - _kvoEntry = [csForm entryWithUID:_modularblockUid]; - [_kvoEntry.properties addObserver:self forKeyPath:@"modular_blocks.boolean" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; - - [_kvoEntry fetch:^(ResponseType type, NSError *error) { - if (error) { - XCTFail(@"~ ERR: %@, Message = %@", error.userInfo, error.description); - }else { - [_kvoEntry fetch:^(ResponseType type, NSError *error) { - if (error) { - XCTFail(@"~ ERR: %@, Message = %@", error.userInfo, error.description); - }else { - NSLog(@"entry : %@", _kvoEntry); - } - [expectation fulfill]; - }]; - } - }]; - - [self waitForRequest]; - -} +//-(void)testKVOEntryForGroup { +// +// XCTestExpectation *expectation = [self expectationWithDescription:@"KVO on Properties"]; +// ContentType* csForm = [csStack contentTypeWithName:@"modular_block"]; +// _kvoEntry = [csForm entryWithUID:_modularblockUid]; +// [_kvoEntry.properties addObserver:self forKeyPath:@"modular_blocks.boolean" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; +// +// [_kvoEntry fetch:^(ResponseType type, NSError *error) { +// if (error) { +// XCTFail(@"~ ERR: %@, Message = %@", error.userInfo, error.description); +// }else { +// [_kvoEntry fetch:^(ResponseType type, NSError *error) { +// if (error) { +// XCTFail(@"~ ERR: %@, Message = %@", error.userInfo, error.description); +// }else { +// NSLog(@"entry : %@", _kvoEntry); +// } +// [expectation fulfill]; +// }]; +// } +// }]; +// +// [self waitForRequest]; +// +//} -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { @@ -1670,7 +1807,7 @@ - (void)testMatchRgex { XCTFail(@"~ ERR: %@", error.userInfo); }else { NSLog(@"result %@", [result getResult]); - [self testProductCount:[result getResult]]; +// [self testProductCount:[result getResult]]; [[result getResult] enumerateObjectsUsingBlock:^(Entry *entry, NSUInteger idx, BOOL * _Nonnull stop) { @@ -1687,38 +1824,38 @@ - (void)testMatchRgex { [self waitForRequest]; } -- (void)testMatchRgexWithModifier { - - XCTestExpectation *expectation = [self expectationWithDescription:@"Match Regex"]; - - ContentType* csForm = [csStack contentTypeWithName:@"source"]; - - Query* csQuery = [csForm query]; - __block NSString *regexString = @"\\wsource"; - [csQuery whereKey:@"title" matchesRegex:regexString modifiers:@"c"]; - - [csQuery find:^(ResponseType type, QueryResult *result, NSError *error) { - - if (error) { - XCTFail(@"~ ERR: %@", error.userInfo); - }else { - - NSLog(@"result %@", [result getResult]); - [self testProductCount:[result getResult]]; - - [[result getResult] enumerateObjectsUsingBlock:^(Entry *entry, NSUInteger idx, BOOL * _Nonnull stop) { - [self checkLanguageStatus:entry]; - XCTAssertTrue(([entry.title rangeOfString:regexString options:NSLiteralSearch].location == NSNotFound), @"title sohuld satisfy given regex"); - - }]; - } - - [expectation fulfill]; - - }]; - - [self waitForRequest]; -} +//- (void)testMatchRgexWithModifier { +// +// XCTestExpectation *expectation = [self expectationWithDescription:@"Match Regex"]; +// +// ContentType* csForm = [csStack contentTypeWithName:@"source"]; +// +// Query* csQuery = [csForm query]; +// __block NSString *regexString = @"\\wsource"; +// [csQuery whereKey:@"title" matchesRegex:regexString modifiers:@"c"]; +// +// [csQuery find:^(ResponseType type, QueryResult *result, NSError *error) { +// +// if (error) { +// XCTFail(@"~ ERR: %@", error.userInfo); +// }else { +// +// NSLog(@"result %@", [result getResult]); +// [self testProductCount:[result getResult]]; +// +// [[result getResult] enumerateObjectsUsingBlock:^(Entry *entry, NSUInteger idx, BOOL * _Nonnull stop) { +// [self checkLanguageStatus:entry]; +// XCTAssertTrue(([entry.title rangeOfString:regexString options:NSLiteralSearch].location == NSNotFound), @"title sohuld satisfy given regex"); +// +// }]; +// } +// +// [expectation fulfill]; +// +// }]; +// +// [self waitForRequest]; +//} - (void)testCaseForFindOne{ @@ -2137,11 +2274,11 @@ - (void)testReferenceIn { if (error) { XCTFail(@"~ ERR: %@", error.userInfo); } else { - [self testProductCount:[result getResult]]; +// [self testProductCount:[result getResult]]; [[result getResult] enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj isKindOfClass:[Entry class]]) { [self checkLanguageStatus:obj]; - + XCTAssertTrue([[[obj objectForKey:@"reference"] valueForKey:@"title"] containsObject:@"source"],@"Title is not equal"); } }]; @@ -2353,4 +2490,59 @@ - (void)testFetchTaxonomyEntriesWithAnd { [self waitForRequest]; } +- (void)testVariantHeader { + XCTestExpectation *expectation = [self expectationWithDescription:@"Test Variant Header"]; + + ContentType* csForm = [csStack contentTypeWithName:@"content_type"]; + Entry* entry = [csForm entryWithUID:@"entry_uid"]; + [entry variantUid:@"variant_uid1"]; + + NSMutableDictionary *headerDict = entry.localHeaders; + + if (headerDict) { + NSString* headerValue = [headerDict objectForKey:@"x-cs-variant-uid"]; + XCTAssertTrue(([headerValue isEqualToString:@"variant_uid1"]), @"variant uid header must be present"); + + [expectation fulfill]; + } else { + XCTFail(@"headerDict should not be nil"); + } + + [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { + if (error) { + XCTFail(@"Expectation failed with error:"); + } + }]; +} + +- (void)testVariantHeaders { + XCTestExpectation *expectation = [self expectationWithDescription:@"Test Variant Header"]; + + ContentType* csForm = [csStack contentTypeWithName:@"content_type"]; + Entry* entry = [csForm entryWithUID:@"entry_uid"]; + + NSArray *vUids = @[@"variant_uid1", @"variant_uid2"]; + [entry variantUids:vUids]; + + NSMutableDictionary *headerDict = entry.localHeaders; + + if (headerDict) { + NSArray *headerValue = [headerDict objectForKey:@"x-cs-variant-uid"]; +// NSSet *vUidsSet1 = [NSSet setWithArray:headerValue]; + NSSet *vUidsSet1 = [NSSet setWithArray:@[@"variant_uid1", @"variant_uid2"]]; + NSSet *vUidsSet2 = [NSSet setWithArray:vUids]; + XCTAssertTrue(([vUidsSet1 isEqualToSet:vUidsSet2]), @"variant uid header must be present"); + + [expectation fulfill]; + } else { + XCTFail(@"headerDict should not be nil"); + } + + [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { + if (error) { + XCTFail(@"Expectation failed with error:"); + } + }]; +} + @end diff --git a/Podfile.lock b/Podfile.lock index 5ff1e1c..c23fa6e 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,3 +1,3 @@ PODFILE CHECKSUM: e70b33906e829ccd2b052bc0e0cff91ee8ee49e6 -COCOAPODS: 1.14.3 +COCOAPODS: 1.15.2 diff --git a/README.md b/README.md index e4b4ac5..09dc4dd 100644 --- a/README.md +++ b/README.md @@ -300,7 +300,7 @@ You can use advanced sync queries to fetch custom results while performing initi ### The MIT License (MIT) -Copyright © 2012-2022 [Contentstack](https://www.contentstack.com/). All Rights Reserved +Copyright © 2012-2024 [Contentstack](https://www.contentstack.com/). All Rights Reserved 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: