Skip to content
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
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
Loading