Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
be5941f
Merge pull request #88 from contentstack/master
harshithad0703 Jun 9, 2025
9e8d2c5
Merge pull request #89 from contentstack/staging
reeshika-h Jun 10, 2025
5a5ab8c
Add CHANGELOG for version 2.1.0 with new features and updates
reeshika-h Jun 27, 2025
c0550a5
Merge pull request #90 from contentstack/fix/DX-279-update-files
reeshika-h Jun 27, 2025
46c9ecf
Add async/await support for fetching resources in Asset, ContentType,…
reeshika-h Aug 20, 2025
e8a6dde
added testcases
reeshika-h Aug 20, 2025
098a40a
changelog added
reeshika-h Aug 20, 2025
bf043df
Merge pull request #93 from contentstack/feat/DX-1405-Async-await-sup…
reeshika-h Aug 20, 2025
5e7db87
Update .talismanrc to include additional fileignoreconfig entry
reeshika-h Aug 20, 2025
10d6255
Merge pull request #94 from contentstack/feat/DX-1405-Async-await-sup…
reeshika-h Aug 20, 2025
311935c
Merge pull request #91 from contentstack/development
harshithad0703 Aug 29, 2025
c5a31f8
Update CI configuration to use the latest Xcode version and resolve d…
reeshika-h Aug 29, 2025
82961a7
Remove unused flag from Carthage bootstrap command for iOS
reeshika-h Aug 29, 2025
d3bff73
Merge pull request #96 from contentstack/fix/ci-workflow
harshithad0703 Aug 29, 2025
a18e39a
fix1: Update Carthage bootstrap command for iOS to use XCFrameworks
reeshika-h Sep 4, 2025
44d7bd1
fix 2: Update Xcode version to 15.4 in CI configuration
reeshika-h Sep 4, 2025
fa4dfc2
fix 3 : Update Xcode version to 16.4.0 in CI configuration
reeshika-h Sep 4, 2025
8ce9d17
fix 4: Update iOS test destination to use generic iOS Simulator
reeshika-h Sep 4, 2025
123d680
fix 5: Update iOS test destination to specify iPhone 16 and OS version
reeshika-h Sep 4, 2025
7f347df
fix 6 : Refactor tests to use async/await syntax
reeshika-h Sep 4, 2025
1698a08
Merge pull request #98 from contentstack/fix/workflow-ci
reeshika-h Sep 4, 2025
6fe4b28
Merge pull request #100 from contentstack/master
harshithad0703 Sep 15, 2025
7bb65f5
Increase timeout for network expectations in various test files from …
reeshika-h Sep 18, 2025
588a3cf
Merge remote-tracking branch 'origin' into fix/DX-3551-ci-workflow-tests
reeshika-h Sep 18, 2025
64c3670
Merge branch 'staging' into fix/DX-3551-ci-workflow-tests
reeshika-h Sep 19, 2025
00031c9
Merge pull request #101 from contentstack/fix/DX-3551-ci-workflow-tests
reeshika-h Sep 22, 2025
7711418
Refactor asynchronous test timeout handling to use 'await fulfillment…
reeshika-h Sep 22, 2025
5d8b92f
Merge pull request #105 from contentstack/fix/DX-3551-ci-workflow-tests
reeshika-h Sep 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
- name: Set up Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '15.4.0'
xcode-version: latest

- name: Create config file
run: |
Expand Down Expand Up @@ -77,8 +77,7 @@ jobs:
- name: Set up Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '15.4.0'

xcode-version: '16.4.0'
- name: Create config file
run: |
echo '{
Expand All @@ -92,7 +91,7 @@ jobs:
xcodebuild test \
-workspace ContentstackSwift.xcworkspace \
-scheme "ContentstackSwift iOS Tests" \
-destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' \
-destination "platform=iOS Simulator,name=iPhone 16,OS=18.5" \
-sdk iphonesimulator \
ONLY_ACTIVE_ARCH=NO \
CODE_SIGNING_ALLOWED=NO
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -80,5 +80,5 @@ Gemfile
#config file
Tests/config.json

snyk_output.json
talisman_output.json
snyk_output.log
talisman_output.log
3 changes: 3 additions & 0 deletions .talismanrc
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ fileignoreconfig:
checksum: dfabf06aeff3576c9347e52b3c494635477d81c7d121d8f1435d79f28829f4d1
- filename: ContentstackSwift.xcodeproj/project.pbxproj
checksum: 8937f832171f26061a209adcd808683f7bdfb739e7fc49aecd853d5055466251
fileignoreconfig:
- filename: ContentstackSwift.xcodeproj/project.pbxproj
checksum: b743f609350e19c2a05a2081f3af3f723992b9610b3b3e6aa402792cad1de2c5
version: "1.0"


Expand Down
205 changes: 205 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
# CHANGELOG

## v2.2.0

### Date: 01-Sep-2025

- Async/await support added

## v2.1.0

### Date: 06-Jun-2025

- ✅ SSL pinning implementation
- 🔧 Added support for Global Fields
- 🔄 Workflow fixes
- ⚙️ Updated `.talismanrc` to version 1.0

---

## v2.0.1

### Date: 13-May-2025

- 🔧 Minor internal fixes
- ✅ Updated testing support
- ⚠️ Note: Versions `v1.6.2` and `v2.0.0` are not recommended due to stability concerns.
Please use `v2.0.1` or later.

---

## v2.0.0

### Date: 12-May-2025

- 🧹 Removed unused workspace configuration file
- 📦 DX Release

---

## v1.6.2

### Date: 07-Feb-2025

- 📦 Dependencies updated
- 🔄 Workflow fixes
- ✅ Updated test cases

---

## v1.6.1

### Date: 07-Oct-2024

- ✨ Added Early Access Header Support

---

## v1.6.0

### Date: 23-Aug-2024

- 🌿 Added support for taxonomy

---

## v1.5.3

### Date: 17-May-2024

- 🌐 Added GCP support
- 🛡️ Added privacy manifest file

---

## v1.5.2

### Date: 21-Mar-2024

- 🔧 Fixed issues while switching stacks

---

## v1.5.1

### Date: 02-Aug-2023

- 🐞 Resolved URLCache issue

---

## v1.5.0

### Date: 26-May-2023

- 🌍 Added Azure-EU region in `ContentstackRegion`
- ➕ Included metadata in:

- `AssetQuery` class
- `EntryQueriable` class
- 🧰 Fixed image transform initialization issue

---

## v1.4.0

### Date: 09-Mar-2023

- ➕ Added header support in:
- `Entry`
- `Asset`
- `Query`

---

## v1.3.1

### Date: 11-Nov-2022

- 🛠️ Resolved URL session default cache issue

---

## v1.3.0

### Date: 18-Aug-2022

- 🌐 Added Azure-NA region in `ContentstackRegion`
- 🔐 Security details added

---

## v1.2.6

### Date: 10-Aug-2021

- 📦 Updated Utils SDK package

---

## v1.2.5

### Date: 16-Jul-2021

- 📝 Added JSON RTE feature support
- 📦 Updated Util SDK version

---

## v1.2.4

### Date: 09-Apr-2021

- 📦 Added CocoaPods dependency

---

## v1.2.3

### Date: 09-Apr-2021

- ➕ Added Utils SDK function support

---

## v1.2.2

### Date: 06-Apr-2021

- 🛠️ Resolved CocoaPods issue
- ➖ Removed unnecessary dependency

---

## v1.2.1

### Date: 06-Apr-2021

- 📁 Project file updated

---

## v1.2.0

### Date: 06-Apr-2021

- ➕ Added embedded items feature:
-`includeEmbeddedItems` in Entry and Query modules
- 📦 Added Utils SDK support

---

## v1.1.0

### Date: 05-Dec-2020

- 🔄 Added content fallback support in:
- `Asset`, `AssetLibrary`, `Entry`, `Query` modules

---

## v1.0.0

### Date: 11-May-2020

- 🚀 Initial release
2 changes: 1 addition & 1 deletion Cartfile.resolved
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github "contentstack/contentstack-swift-dvr" "c8040a2451e4bc2c312347531cac6c73f23ce50c"
github "contentstack/contentstack-swift-dvr" "v1.0.0"
github "contentstack/contentstack-utils-swift" "v1.3.4"
8 changes: 8 additions & 0 deletions ContentstackSwift.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,9 @@
47C6EFC52C0B5B9400F0D5CF /* Taxonomy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6EFC12C0B5B9400F0D5CF /* Taxonomy.swift */; };
47D561512C9EF97D00DC085D /* ContentstackUtils in Frameworks */ = {isa = PBXBuildFile; productRef = 47D561502C9EF97D00DC085D /* ContentstackUtils */; };
47D561572C9EFA5900DC085D /* DVR in Frameworks */ = {isa = PBXBuildFile; productRef = 47D561562C9EFA5900DC085D /* DVR */; };
672F76992E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */; };
672F769A2E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */; };
672F769B2E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */; };
6750778E2D3E256A0076A066 /* DVR in Frameworks */ = {isa = PBXBuildFile; productRef = 6750778D2D3E256A0076A066 /* DVR */; };
67EE21DF2DDB4013005AC119 /* CSURLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */; };
67EE21E02DDB4013005AC119 /* CSURLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */; };
Expand Down Expand Up @@ -416,6 +419,7 @@
47B09C242CA952E400B8AB41 /* DVR.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DVR.framework; sourceTree = BUILT_PRODUCTS_DIR; };
47B4DC612C232A8200370CFC /* TaxonomyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaxonomyTest.swift; sourceTree = "<group>"; };
47C6EFC12C0B5B9400F0D5CF /* Taxonomy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Taxonomy.swift; sourceTree = "<group>"; };
672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncAwaitAPITest.swift; sourceTree = "<group>"; };
67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CSURLSessionDelegate.swift; sourceTree = "<group>"; };
67EE222B2DE4868F005AC119 /* GlobalField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalField.swift; sourceTree = "<group>"; };
67EE22302DE58B51005AC119 /* GlobalFieldModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalFieldModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -666,6 +670,7 @@
0FFA5D9D241F8F9B003B3AF5 /* APITests */ = {
isa = PBXGroup;
children = (
672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */,
67EE22352DE5BAF2005AC119 /* GlobalFieldAPITest.swift */,
0F50EA1C244ED88C00E5D705 /* StackCacheAPITest.swift */,
470657532B5E785C00BBFF88 /* ContentTypeQueryAPITest.swift */,
Expand Down Expand Up @@ -1146,6 +1151,7 @@
47B4DC622C232A8200370CFC /* TaxonomyTest.swift in Sources */,
0F50EA1D244ED88C00E5D705 /* StackCacheAPITest.swift in Sources */,
470657582B5E788400BBFF88 /* EntryAPITest.swift in Sources */,
672F76992E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */,
0F096B14243610470094F042 /* ImageTransformTestAdditional.swift in Sources */,
0FD39D4A24237A0400E34826 /* ContentTypeQueryTest.swift in Sources */,
0FFBB44C24470C43000D2795 /* ContentStackLogTest.swift in Sources */,
Expand Down Expand Up @@ -1228,6 +1234,7 @@
47B4DC632C232A8200370CFC /* TaxonomyTest.swift in Sources */,
0FFA5D90241F8126003B3AF5 /* ContentstackConfigTest.swift in Sources */,
0F50EA1E244ED88C00E5D705 /* StackCacheAPITest.swift in Sources */,
672F769B2E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */,
0F096B15243610470094F042 /* ImageTransformTestAdditional.swift in Sources */,
0FD39D4B24237A0400E34826 /* ContentTypeQueryTest.swift in Sources */,
0FFBB44D24470C43000D2795 /* ContentStackLogTest.swift in Sources */,
Expand Down Expand Up @@ -1310,6 +1317,7 @@
47B4DC642C232A8200370CFC /* TaxonomyTest.swift in Sources */,
0FFA5D91241F8127003B3AF5 /* ContentstackConfigTest.swift in Sources */,
0F50EA1F244ED88C00E5D705 /* StackCacheAPITest.swift in Sources */,
672F769A2E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */,
0F096B16243610470094F042 /* ImageTransformTestAdditional.swift in Sources */,
0FD39D4C24237A0400E34826 /* ContentTypeQueryTest.swift in Sources */,
0FFBB44E24470C43000D2795 /* ContentStackLogTest.swift in Sources */,
Expand Down
23 changes: 23 additions & 0 deletions Sources/Asset.swift
Original file line number Diff line number Diff line change
Expand Up @@ -246,4 +246,27 @@ extension Asset: ResourceQueryable {
}
})
}

// MARK: - Async/Await Implementation

/// Async version of fetch that returns the Asset directly
/// - Returns: The fetched Asset
/// - Throws: Network, decoding, or cache errors
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
public func fetch<ResourceType>() async throws -> ResourceType
where ResourceType: EndpointAccessible & Decodable {
guard let uid = self.uid else { fatalError("Please provide Asset uid") }
let response: ContentstackResponse<ResourceType> = try await self.stack.fetch(
endpoint: ResourceType.endpoint,
cachePolicy: self.cachePolicy,
parameters: parameters + [QueryParameter.uid: uid],
headers: headers
)

if let resource = response.items.first {
return resource
} else {
throw SDKError.invalidUID(string: uid)
}
}
}
23 changes: 23 additions & 0 deletions Sources/ContentType.swift
Original file line number Diff line number Diff line change
Expand Up @@ -178,4 +178,27 @@ extension ContentType: ResourceQueryable {
}
})
}

// MARK: - Async/Await Implementation

/// Async version of fetch that returns the ContentType directly
/// - Returns: The fetched ContentType
/// - Throws: Network, decoding, or cache errors
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
public func fetch<ResourceType>() async throws -> ResourceType
where ResourceType: EndpointAccessible & Decodable {
guard let uid = self.uid else { fatalError("Please provide ContentType uid") }
let response: ContentstackResponse<ResourceType> = try await self.stack.fetch(
endpoint: ResourceType.endpoint,
cachePolicy: self.cachePolicy,
parameters: parameters + [QueryParameter.uid: uid],
headers: headers
)

if let resource = response.items.first {
return resource
} else {
throw SDKError.invalidUID(string: uid)
}
}
}
24 changes: 24 additions & 0 deletions Sources/Entry.swift
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,28 @@ extension Entry: ResourceQueryable {
}
})
}

// MARK: - Async/Await Implementation

/// Async version of fetch that returns the Entry directly
/// - Returns: The fetched Entry
/// - Throws: Network, decoding, or cache errors
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
public func fetch<ResourceType>() async throws -> ResourceType
where ResourceType: EndpointAccessible & Decodable {
guard let uid = self.uid else { fatalError("Please provide Entry uid") }
let response: ContentstackResponse<ResourceType> = try await self.stack.fetch(
endpoint: ResourceType.endpoint,
cachePolicy: self.cachePolicy,
parameters: parameters + [QueryParameter.uid: uid,
QueryParameter.contentType: self.contentType.uid!],
headers: headers
)

if let resource = response.items.first {
return resource
} else {
throw SDKError.invalidUID(string: uid)
}
}
}
Loading