Skip to content

Commit fa0ff89

Browse files
Merge pull request #95 from contentstack/staging
DX | 15-09-2025 | Release
2 parents 8e58d39 + 5d8b92f commit fa0ff89

21 files changed

+1073
-285
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
- name: Set up Xcode
3434
uses: maxim-lobanov/setup-xcode@v1
3535
with:
36-
xcode-version: '15.4.0'
36+
xcode-version: latest
3737

3838
- name: Create config file
3939
run: |
@@ -77,8 +77,7 @@ jobs:
7777
- name: Set up Xcode
7878
uses: maxim-lobanov/setup-xcode@v1
7979
with:
80-
xcode-version: '15.4.0'
81-
80+
xcode-version: '16.4.0'
8281
- name: Create config file
8382
run: |
8483
echo '{
@@ -92,7 +91,7 @@ jobs:
9291
xcodebuild test \
9392
-workspace ContentstackSwift.xcworkspace \
9493
-scheme "ContentstackSwift iOS Tests" \
95-
-destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' \
94+
-destination "platform=iOS Simulator,name=iPhone 16,OS=18.5" \
9695
-sdk iphonesimulator \
9796
ONLY_ACTIVE_ARCH=NO \
9897
CODE_SIGNING_ALLOWED=NO

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,5 @@ Gemfile
8080
#config file
8181
Tests/config.json
8282

83-
snyk_output.json
84-
talisman_output.json
83+
snyk_output.log
84+
talisman_output.log

.talismanrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ fileignoreconfig:
2828
checksum: dfabf06aeff3576c9347e52b3c494635477d81c7d121d8f1435d79f28829f4d1
2929
- filename: ContentstackSwift.xcodeproj/project.pbxproj
3030
checksum: 8937f832171f26061a209adcd808683f7bdfb739e7fc49aecd853d5055466251
31+
fileignoreconfig:
32+
- filename: ContentstackSwift.xcodeproj/project.pbxproj
33+
checksum: b743f609350e19c2a05a2081f3af3f723992b9610b3b3e6aa402792cad1de2c5
3134
version: "1.0"
3235

3336

CHANGELOG.md

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
# CHANGELOG
2+
3+
## v2.2.0
4+
5+
### Date: 01-Sep-2025
6+
7+
- Async/await support added
8+
9+
## v2.1.0
10+
11+
### Date: 06-Jun-2025
12+
13+
- ✅ SSL pinning implementation
14+
- 🔧 Added support for Global Fields
15+
- 🔄 Workflow fixes
16+
- ⚙️ Updated `.talismanrc` to version 1.0
17+
18+
---
19+
20+
## v2.0.1
21+
22+
### Date: 13-May-2025
23+
24+
- 🔧 Minor internal fixes
25+
- ✅ Updated testing support
26+
- ⚠️ Note: Versions `v1.6.2` and `v2.0.0` are not recommended due to stability concerns.
27+
Please use `v2.0.1` or later.
28+
29+
---
30+
31+
## v2.0.0
32+
33+
### Date: 12-May-2025
34+
35+
- 🧹 Removed unused workspace configuration file
36+
- 📦 DX Release
37+
38+
---
39+
40+
## v1.6.2
41+
42+
### Date: 07-Feb-2025
43+
44+
- 📦 Dependencies updated
45+
- 🔄 Workflow fixes
46+
- ✅ Updated test cases
47+
48+
---
49+
50+
## v1.6.1
51+
52+
### Date: 07-Oct-2024
53+
54+
- ✨ Added Early Access Header Support
55+
56+
---
57+
58+
## v1.6.0
59+
60+
### Date: 23-Aug-2024
61+
62+
- 🌿 Added support for taxonomy
63+
64+
---
65+
66+
## v1.5.3
67+
68+
### Date: 17-May-2024
69+
70+
- 🌐 Added GCP support
71+
- 🛡️ Added privacy manifest file
72+
73+
---
74+
75+
## v1.5.2
76+
77+
### Date: 21-Mar-2024
78+
79+
- 🔧 Fixed issues while switching stacks
80+
81+
---
82+
83+
## v1.5.1
84+
85+
### Date: 02-Aug-2023
86+
87+
- 🐞 Resolved URLCache issue
88+
89+
---
90+
91+
## v1.5.0
92+
93+
### Date: 26-May-2023
94+
95+
- 🌍 Added Azure-EU region in `ContentstackRegion`
96+
- ➕ Included metadata in:
97+
98+
- `AssetQuery` class
99+
- `EntryQueriable` class
100+
- 🧰 Fixed image transform initialization issue
101+
102+
---
103+
104+
## v1.4.0
105+
106+
### Date: 09-Mar-2023
107+
108+
- ➕ Added header support in:
109+
- `Entry`
110+
- `Asset`
111+
- `Query`
112+
113+
---
114+
115+
## v1.3.1
116+
117+
### Date: 11-Nov-2022
118+
119+
- 🛠️ Resolved URL session default cache issue
120+
121+
---
122+
123+
## v1.3.0
124+
125+
### Date: 18-Aug-2022
126+
127+
- 🌐 Added Azure-NA region in `ContentstackRegion`
128+
- 🔐 Security details added
129+
130+
---
131+
132+
## v1.2.6
133+
134+
### Date: 10-Aug-2021
135+
136+
- 📦 Updated Utils SDK package
137+
138+
---
139+
140+
## v1.2.5
141+
142+
### Date: 16-Jul-2021
143+
144+
- 📝 Added JSON RTE feature support
145+
- 📦 Updated Util SDK version
146+
147+
---
148+
149+
## v1.2.4
150+
151+
### Date: 09-Apr-2021
152+
153+
- 📦 Added CocoaPods dependency
154+
155+
---
156+
157+
## v1.2.3
158+
159+
### Date: 09-Apr-2021
160+
161+
- ➕ Added Utils SDK function support
162+
163+
---
164+
165+
## v1.2.2
166+
167+
### Date: 06-Apr-2021
168+
169+
- 🛠️ Resolved CocoaPods issue
170+
- ➖ Removed unnecessary dependency
171+
172+
---
173+
174+
## v1.2.1
175+
176+
### Date: 06-Apr-2021
177+
178+
- 📁 Project file updated
179+
180+
---
181+
182+
## v1.2.0
183+
184+
### Date: 06-Apr-2021
185+
186+
- ➕ Added embedded items feature:
187+
-`includeEmbeddedItems` in Entry and Query modules
188+
- 📦 Added Utils SDK support
189+
190+
---
191+
192+
## v1.1.0
193+
194+
### Date: 05-Dec-2020
195+
196+
- 🔄 Added content fallback support in:
197+
- `Asset`, `AssetLibrary`, `Entry`, `Query` modules
198+
199+
---
200+
201+
## v1.0.0
202+
203+
### Date: 11-May-2020
204+
205+
- 🚀 Initial release

Cartfile.resolved

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
github "contentstack/contentstack-swift-dvr" "c8040a2451e4bc2c312347531cac6c73f23ce50c"
1+
github "contentstack/contentstack-swift-dvr" "v1.0.0"
22
github "contentstack/contentstack-utils-swift" "v1.3.4"

ContentstackSwift.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,9 @@
265265
47C6EFC52C0B5B9400F0D5CF /* Taxonomy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6EFC12C0B5B9400F0D5CF /* Taxonomy.swift */; };
266266
47D561512C9EF97D00DC085D /* ContentstackUtils in Frameworks */ = {isa = PBXBuildFile; productRef = 47D561502C9EF97D00DC085D /* ContentstackUtils */; };
267267
47D561572C9EFA5900DC085D /* DVR in Frameworks */ = {isa = PBXBuildFile; productRef = 47D561562C9EFA5900DC085D /* DVR */; };
268+
672F76992E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */; };
269+
672F769A2E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */; };
270+
672F769B2E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */; };
268271
6750778E2D3E256A0076A066 /* DVR in Frameworks */ = {isa = PBXBuildFile; productRef = 6750778D2D3E256A0076A066 /* DVR */; };
269272
67EE21DF2DDB4013005AC119 /* CSURLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */; };
270273
67EE21E02DDB4013005AC119 /* CSURLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */; };
@@ -416,6 +419,7 @@
416419
47B09C242CA952E400B8AB41 /* DVR.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DVR.framework; sourceTree = BUILT_PRODUCTS_DIR; };
417420
47B4DC612C232A8200370CFC /* TaxonomyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaxonomyTest.swift; sourceTree = "<group>"; };
418421
47C6EFC12C0B5B9400F0D5CF /* Taxonomy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Taxonomy.swift; sourceTree = "<group>"; };
422+
672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncAwaitAPITest.swift; sourceTree = "<group>"; };
419423
67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CSURLSessionDelegate.swift; sourceTree = "<group>"; };
420424
67EE222B2DE4868F005AC119 /* GlobalField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalField.swift; sourceTree = "<group>"; };
421425
67EE22302DE58B51005AC119 /* GlobalFieldModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalFieldModel.swift; sourceTree = "<group>"; };
@@ -666,6 +670,7 @@
666670
0FFA5D9D241F8F9B003B3AF5 /* APITests */ = {
667671
isa = PBXGroup;
668672
children = (
673+
672F76982E55ADBE00C248D6 /* AsyncAwaitAPITest.swift */,
669674
67EE22352DE5BAF2005AC119 /* GlobalFieldAPITest.swift */,
670675
0F50EA1C244ED88C00E5D705 /* StackCacheAPITest.swift */,
671676
470657532B5E785C00BBFF88 /* ContentTypeQueryAPITest.swift */,
@@ -1146,6 +1151,7 @@
11461151
47B4DC622C232A8200370CFC /* TaxonomyTest.swift in Sources */,
11471152
0F50EA1D244ED88C00E5D705 /* StackCacheAPITest.swift in Sources */,
11481153
470657582B5E788400BBFF88 /* EntryAPITest.swift in Sources */,
1154+
672F76992E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */,
11491155
0F096B14243610470094F042 /* ImageTransformTestAdditional.swift in Sources */,
11501156
0FD39D4A24237A0400E34826 /* ContentTypeQueryTest.swift in Sources */,
11511157
0FFBB44C24470C43000D2795 /* ContentStackLogTest.swift in Sources */,
@@ -1228,6 +1234,7 @@
12281234
47B4DC632C232A8200370CFC /* TaxonomyTest.swift in Sources */,
12291235
0FFA5D90241F8126003B3AF5 /* ContentstackConfigTest.swift in Sources */,
12301236
0F50EA1E244ED88C00E5D705 /* StackCacheAPITest.swift in Sources */,
1237+
672F769B2E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */,
12311238
0F096B15243610470094F042 /* ImageTransformTestAdditional.swift in Sources */,
12321239
0FD39D4B24237A0400E34826 /* ContentTypeQueryTest.swift in Sources */,
12331240
0FFBB44D24470C43000D2795 /* ContentStackLogTest.swift in Sources */,
@@ -1310,6 +1317,7 @@
13101317
47B4DC642C232A8200370CFC /* TaxonomyTest.swift in Sources */,
13111318
0FFA5D91241F8127003B3AF5 /* ContentstackConfigTest.swift in Sources */,
13121319
0F50EA1F244ED88C00E5D705 /* StackCacheAPITest.swift in Sources */,
1320+
672F769A2E55ADBE00C248D6 /* AsyncAwaitAPITest.swift in Sources */,
13131321
0F096B16243610470094F042 /* ImageTransformTestAdditional.swift in Sources */,
13141322
0FD39D4C24237A0400E34826 /* ContentTypeQueryTest.swift in Sources */,
13151323
0FFBB44E24470C43000D2795 /* ContentStackLogTest.swift in Sources */,

Sources/Asset.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,4 +246,27 @@ extension Asset: ResourceQueryable {
246246
}
247247
})
248248
}
249+
250+
// MARK: - Async/Await Implementation
251+
252+
/// Async version of fetch that returns the Asset directly
253+
/// - Returns: The fetched Asset
254+
/// - Throws: Network, decoding, or cache errors
255+
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
256+
public func fetch<ResourceType>() async throws -> ResourceType
257+
where ResourceType: EndpointAccessible & Decodable {
258+
guard let uid = self.uid else { fatalError("Please provide Asset uid") }
259+
let response: ContentstackResponse<ResourceType> = try await self.stack.fetch(
260+
endpoint: ResourceType.endpoint,
261+
cachePolicy: self.cachePolicy,
262+
parameters: parameters + [QueryParameter.uid: uid],
263+
headers: headers
264+
)
265+
266+
if let resource = response.items.first {
267+
return resource
268+
} else {
269+
throw SDKError.invalidUID(string: uid)
270+
}
271+
}
249272
}

Sources/ContentType.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,27 @@ extension ContentType: ResourceQueryable {
178178
}
179179
})
180180
}
181+
182+
// MARK: - Async/Await Implementation
183+
184+
/// Async version of fetch that returns the ContentType directly
185+
/// - Returns: The fetched ContentType
186+
/// - Throws: Network, decoding, or cache errors
187+
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
188+
public func fetch<ResourceType>() async throws -> ResourceType
189+
where ResourceType: EndpointAccessible & Decodable {
190+
guard let uid = self.uid else { fatalError("Please provide ContentType uid") }
191+
let response: ContentstackResponse<ResourceType> = try await self.stack.fetch(
192+
endpoint: ResourceType.endpoint,
193+
cachePolicy: self.cachePolicy,
194+
parameters: parameters + [QueryParameter.uid: uid],
195+
headers: headers
196+
)
197+
198+
if let resource = response.items.first {
199+
return resource
200+
} else {
201+
throw SDKError.invalidUID(string: uid)
202+
}
203+
}
181204
}

Sources/Entry.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,28 @@ extension Entry: ResourceQueryable {
175175
}
176176
})
177177
}
178+
179+
// MARK: - Async/Await Implementation
180+
181+
/// Async version of fetch that returns the Entry directly
182+
/// - Returns: The fetched Entry
183+
/// - Throws: Network, decoding, or cache errors
184+
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
185+
public func fetch<ResourceType>() async throws -> ResourceType
186+
where ResourceType: EndpointAccessible & Decodable {
187+
guard let uid = self.uid else { fatalError("Please provide Entry uid") }
188+
let response: ContentstackResponse<ResourceType> = try await self.stack.fetch(
189+
endpoint: ResourceType.endpoint,
190+
cachePolicy: self.cachePolicy,
191+
parameters: parameters + [QueryParameter.uid: uid,
192+
QueryParameter.contentType: self.contentType.uid!],
193+
headers: headers
194+
)
195+
196+
if let resource = response.items.first {
197+
return resource
198+
} else {
199+
throw SDKError.invalidUID(string: uid)
200+
}
201+
}
178202
}

0 commit comments

Comments
 (0)