From f185cfbd979002bbfe245dd8e3f8a2202b6e55c0 Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Sun, 2 Aug 2026 03:17:45 +0800 Subject: [PATCH 1/7] build(ios): pin SQLCipher for both dependency managers SQLCipher 4.11.0 removed CocoaPods support ("Removes CocoaPods support (SQLCipher.podspec.json)" in its CHANGELOG), so 4.10.0 is the last version published to the CocoaPods trunk and this pod cannot advance past it. Pin it there rather than leaving the dependency open, so CocoaPods resolution is deterministic and the ceiling is visible in the podspec. Pin the Swift package to SQLCipher.swift 4.17.0 exactly. That is the same SQLCipher release Android uses after net.zetetic:sqlcipher-android was updated to 4.17.0, so both native platforms sit on one SQLite baseline (3.53.3). --- CapacitorCommunitySqlite.podspec | 8 +++++++- Package.swift | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CapacitorCommunitySqlite.podspec b/CapacitorCommunitySqlite.podspec index 47785126..f844a310 100644 --- a/CapacitorCommunitySqlite.podspec +++ b/CapacitorCommunitySqlite.podspec @@ -13,7 +13,13 @@ Pod::Spec.new do |s| s.source_files = 'ios/Plugin/**/*.{swift,h,m,c,cc,mm,cpp}' s.ios.deployment_target = '15.0' s.dependency 'Capacitor' - s.dependency 'SQLCipher' + # SQLCipher 4.11.0 removed CocoaPods support ("Removes CocoaPods support + # (SQLCipher.podspec.json)" in its CHANGELOG), so 4.10.0 is the last version published to + # the CocoaPods trunk and this pod can never advance past it. Pinned rather than left open + # so CocoaPods resolution is deterministic and the ceiling is visible. Swift Package Manager + # (Package.swift) carries the current SQLCipher and is the path that stays in step with + # Android; see the iOS section of the README. + s.dependency 'SQLCipher', '4.10.0' s.dependency 'ZIPFoundation' s.swift_version = '5.1' end diff --git a/Package.swift b/Package.swift index 97b9e7df..e881a04f 100644 --- a/Package.swift +++ b/Package.swift @@ -11,7 +11,7 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", branch: "8.0.0"), - .package(url: "https://github.com/sqlcipher/SQLCipher.swift.git", from: "4.14.0"), + .package(url: "https://github.com/sqlcipher/SQLCipher.swift.git", exact: "4.17.0"), .package(url: "https://github.com/weichsel/ZIPFoundation.git", from: "0.9.0") ], targets: [ From 11c143da6a6f9327d95d6faae30578ec7458133e Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Sun, 2 Aug 2026 03:17:58 +0800 Subject: [PATCH 2/7] build(ios): verify iOS through Swift Package Manager and lint the podspec verify:ios built the CocoaPods development workspace, whose Podfile pinned SQLCipher to ~>4.5.6. CI was therefore validating the plugin against a SQLCipher that no consumer resolves. Build the Swift package instead, which is the integration Capacitor 8 gives a new iOS project by default. build-for-testing rather than build, so the XCTest target is compiled on every run, and a generic iOS Simulator destination rather than a named simulator, so the gate does not depend on which simulators a machine happens to have. Running the tests needs a concrete device and stays a local command, documented in CONTRIBUTING.md. Compiling that target showed it has never built under Swift Package Manager: Package.swift has declared it since SPM support was added, but the source imported the Xcode workspace's module name rather than the package module, and its call to CapacitorSQLite() predates the config: parameter. Nothing built it, because the previous command used the Plugin scheme, which excludes tests. Both errors are fixed here. Add verify:ios:pod so the CocoaPods path that existing consumers depend on cannot break unnoticed. It needs --allow-warnings for six warnings that predate this change: one on the repository URL scheme, five from the plugin sources. --- .github/workflows/ci.yml | 4 +++- ios/PluginTests/CapacitorSQLitePluginTests.swift | 4 ++-- package.json | 5 +++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f75736f6..5de16904 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,8 +29,10 @@ jobs: java-version: ${{ env.JAVA_VERSION }} - name: Install dependencies run: npm ci - - name: Build iOS + - name: Build iOS (Swift Package Manager) run: npm run verify:ios + - name: Lint iOS podspec (CocoaPods compatibility path) + run: npm run verify:ios:pod - name: Build Android run: npm run verify:android - name: Build Web diff --git a/ios/PluginTests/CapacitorSQLitePluginTests.swift b/ios/PluginTests/CapacitorSQLitePluginTests.swift index 38a66d07..aa979d13 100644 --- a/ios/PluginTests/CapacitorSQLitePluginTests.swift +++ b/ios/PluginTests/CapacitorSQLitePluginTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import Plugin +@testable import CapacitorSQLitePlugin class CapacitorSQLiteTests: XCTestCase { @@ -7,7 +7,7 @@ class CapacitorSQLiteTests: XCTestCase { // This is an example of a functional test case for a plugin. // Use XCTAssert and related functions to verify your tests produce the correct results. - let implementation = CapacitorSQLite() + let implementation = CapacitorSQLite(config: SqliteConfig()) let value = "Hello, World!" let result = implementation.echo(value) diff --git a/package.json b/package.json index c4139b73..8811cf35 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,9 @@ "sqlite" ], "scripts": { - "verify": "npm run verify:ios && npm run verify:android && npm run verify:web && npm run verify:electron", - "verify:ios": "cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin OTHER_CFLAGS='-DHAVE_GETHOSTUUID=0' && cd ..", + "verify": "npm run verify:ios && npm run verify:ios:pod && npm run verify:android && npm run verify:web && npm run verify:electron", + "verify:ios": "xcodebuild build-for-testing -scheme CapacitorCommunitySqlite -destination 'generic/platform=iOS Simulator'", + "verify:ios:pod": "pod lib lint CapacitorCommunitySqlite.podspec --allow-warnings", "verify:android": "cd android && ./gradlew clean build test && cd ..", "verify:web": "npm run build", "verify:electron": "npm run build-electron", From 24e6c7765a37812934a82b8406a0e7a01dbaca70 Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Sun, 2 Aug 2026 03:18:08 +0800 Subject: [PATCH 3/7] chore(ios): remove the unused CocoaPods development workspace Nothing references ios/Podfile, ios/Plugin.xcodeproj or ios/Plugin.xcworkspace now that verify:ios builds the Swift package. Podfile.lock and Pods/ were never tracked, and the npm files whitelist only ever shipped ios/Plugin/, so none of this reached a consumer. pod lib lint covers what building the workspace covered, and covers it better: it builds the pod from the podspec in a clean-room project against the SQLCipher version consumers actually resolve, rather than against the Podfile's ~>4.5.6. Contributors open Package.swift in Xcode instead of generating a workspace first. The XCTest target is unaffected and stays at ios/PluginTests, now built by verify:ios. --- ios/Plugin.xcodeproj/project.pbxproj | 765 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/xcschemes/Plugin.xcscheme | 77 -- .../xcschemes/PluginTests.xcscheme | 68 -- .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - ios/Podfile | 21 - 9 files changed, 972 deletions(-) delete mode 100644 ios/Plugin.xcodeproj/project.pbxproj delete mode 100644 ios/Plugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 ios/Plugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 ios/Plugin.xcodeproj/xcshareddata/xcschemes/Plugin.xcscheme delete mode 100644 ios/Plugin.xcodeproj/xcshareddata/xcschemes/PluginTests.xcscheme delete mode 100644 ios/Plugin.xcworkspace/contents.xcworkspacedata delete mode 100644 ios/Plugin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 ios/Plugin.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 ios/Podfile diff --git a/ios/Plugin.xcodeproj/project.pbxproj b/ios/Plugin.xcodeproj/project.pbxproj deleted file mode 100644 index 2ec973b1..00000000 --- a/ios/Plugin.xcodeproj/project.pbxproj +++ /dev/null @@ -1,765 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 48; - objects = { - -/* Begin PBXBuildFile section */ - 03FC29A292ACC40490383A1F /* Pods_Plugin.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B2A61DA5A1F2DD4F959604D /* Pods_Plugin.framework */; }; - 20C0B05DCFC8E3958A738AF2 /* Pods_PluginTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6753A823D3815DB436415E3 /* Pods_PluginTests.framework */; }; - 2C2352C4276C8195003978B4 /* UtilsNCDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C2352C3276C8195003978B4 /* UtilsNCDatabase.swift */; }; - 2C3AF2EC25B58C3400C5EF2F /* ReturnHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF2EB25B58C3400C5EF2F /* ReturnHandler.swift */; }; - 2C3AF2F025B58E8500C5EF2F /* GlobalSQLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF2EF25B58E8500C5EF2F /* GlobalSQLite.swift */; }; - 2C3AF2F425B58EC400C5EF2F /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF2F325B58EC400C5EF2F /* Database.swift */; }; - 2C3AF2F925B591ED00C5EF2F /* UtilsBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF2F825B591ED00C5EF2F /* UtilsBinding.swift */; }; - 2C3AF30625B592FD00C5EF2F /* UtilsDrop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF30525B592FD00C5EF2F /* UtilsDrop.swift */; }; - 2C3AF30A25B5932B00C5EF2F /* UtilsEncryption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF30925B5932B00C5EF2F /* UtilsEncryption.swift */; }; - 2C3AF30E25B5935B00C5EF2F /* UtilsFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF30D25B5935B00C5EF2F /* UtilsFile.swift */; }; - 2C3AF31225B5938500C5EF2F /* UtilsJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF31125B5938500C5EF2F /* UtilsJson.swift */; }; - 2C3AF31625B593B600C5EF2F /* UtilsSQLCipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF31525B593B600C5EF2F /* UtilsSQLCipher.swift */; }; - 2C3AF31A25B593E500C5EF2F /* UtilsUpgrade.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AF31925B593E500C5EF2F /* UtilsUpgrade.swift */; }; - 2C479B9225BD874C009B1A49 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C479B9125BD874C009B1A49 /* Security.framework */; }; - 2C772263262FF971000C65E9 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C772262262FF971000C65E9 /* String.swift */; }; - 2C7E57212A38655600C04517 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C7E571F2A38655600C04517 /* Data.swift */; }; - 2C7E57222A38655600C04517 /* Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C7E57202A38655600C04517 /* Array.swift */; }; - 2C8C860B2A84373F001F9CB2 /* UtilsSQLStatement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C8C860A2A84373F001F9CB2 /* UtilsSQLStatement.swift */; }; - 2C8C860D2A84376D001F9CB2 /* UtilsDelete.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C8C860C2A84376D001F9CB2 /* UtilsDelete.swift */; }; - 2C97B3FF2A6E999800A979E8 /* ImportData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C97B3FE2A6E999800A979E8 /* ImportData.swift */; }; - 2CB4368728EEEFF500C973AA /* UtilsDownloadFromHTTP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB4368628EEEFF500C973AA /* UtilsDownloadFromHTTP.swift */; }; - 2CB89AE327C57603001F464B /* BiometricIDAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB89AE227C57603001F464B /* BiometricIDAuthentication.swift */; }; - 2CB9B9342601EEE500743730 /* JsonSQLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB9B9312601EEE500743730 /* JsonSQLite.swift */; }; - 2CB9B9352601EEE500743730 /* ImportFromJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB9B9322601EEE500743730 /* ImportFromJson.swift */; }; - 2CB9B9362601EEE500743730 /* ExportToJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB9B9332601EEE500743730 /* ExportToJson.swift */; }; - 2CB9B93A2601EF3700743730 /* UtilsMigrate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB9B9392601EF3700743730 /* UtilsMigrate.swift */; }; - 2CBB5E0426333DD2000FA0A6 /* Notification.Name.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CBB5E0326333DD2000FA0A6 /* Notification.Name.swift */; }; - 2CC9CBC226413B9F002028BF /* UtilsSecret.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CC9CBC126413B9F002028BF /* UtilsSecret.swift */; }; - 2CC9CBD8264142FF002028BF /* KeychainServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CC9CBD7264142FF002028BF /* KeychainServices.swift */; }; - 2CDB5FF227822D7B0040BBA3 /* SqliteConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CDB5FF127822D7B0040BBA3 /* SqliteConfig.swift */; }; - 2F98D68224C9AAE500613A4C /* CapacitorSQLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F98D68124C9AAE400613A4C /* CapacitorSQLite.swift */; }; - 50ADFF92201F53D600D50D53 /* Plugin.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50ADFF88201F53D600D50D53 /* Plugin.framework */; }; - 50ADFF97201F53D600D50D53 /* CapacitorSQLitePluginTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50ADFF96201F53D600D50D53 /* CapacitorSQLitePluginTests.swift */; }; - 50ADFFA42020D75100D50D53 /* Capacitor.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50ADFFA52020D75100D50D53 /* Capacitor.framework */; }; - 50E1A94820377CB70090CE1A /* CapacitorSQLitePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E1A94720377CB70090CE1A /* CapacitorSQLitePlugin.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 50ADFF93201F53D600D50D53 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 50ADFF7F201F53D600D50D53 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 50ADFF87201F53D600D50D53; - remoteInfo = Plugin; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 2C2352C3276C8195003978B4 /* UtilsNCDatabase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsNCDatabase.swift; sourceTree = ""; }; - 2C3AF2EB25B58C3400C5EF2F /* ReturnHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReturnHandler.swift; sourceTree = ""; }; - 2C3AF2EF25B58E8500C5EF2F /* GlobalSQLite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalSQLite.swift; sourceTree = ""; }; - 2C3AF2F325B58EC400C5EF2F /* Database.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Database.swift; sourceTree = ""; }; - 2C3AF2F825B591ED00C5EF2F /* UtilsBinding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsBinding.swift; sourceTree = ""; }; - 2C3AF30525B592FD00C5EF2F /* UtilsDrop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsDrop.swift; sourceTree = ""; }; - 2C3AF30925B5932B00C5EF2F /* UtilsEncryption.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsEncryption.swift; sourceTree = ""; }; - 2C3AF30D25B5935B00C5EF2F /* UtilsFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsFile.swift; sourceTree = ""; }; - 2C3AF31125B5938500C5EF2F /* UtilsJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsJson.swift; sourceTree = ""; }; - 2C3AF31525B593B600C5EF2F /* UtilsSQLCipher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsSQLCipher.swift; sourceTree = ""; }; - 2C3AF31925B593E500C5EF2F /* UtilsUpgrade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsUpgrade.swift; sourceTree = ""; }; - 2C479B9125BD874C009B1A49 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 2C772262262FF971000C65E9 /* String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = ""; }; - 2C7E571F2A38655600C04517 /* Data.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Data.swift; sourceTree = ""; }; - 2C7E57202A38655600C04517 /* Array.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Array.swift; sourceTree = ""; }; - 2C8C860A2A84373F001F9CB2 /* UtilsSQLStatement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsSQLStatement.swift; sourceTree = ""; }; - 2C8C860C2A84376D001F9CB2 /* UtilsDelete.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsDelete.swift; sourceTree = ""; }; - 2C97B3FE2A6E999800A979E8 /* ImportData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportData.swift; sourceTree = ""; }; - 2CB4368628EEEFF500C973AA /* UtilsDownloadFromHTTP.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsDownloadFromHTTP.swift; sourceTree = ""; }; - 2CB89AE227C57603001F464B /* BiometricIDAuthentication.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricIDAuthentication.swift; sourceTree = ""; }; - 2CB9B9312601EEE500743730 /* JsonSQLite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JsonSQLite.swift; sourceTree = ""; }; - 2CB9B9322601EEE500743730 /* ImportFromJson.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportFromJson.swift; sourceTree = ""; }; - 2CB9B9332601EEE500743730 /* ExportToJson.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportToJson.swift; sourceTree = ""; }; - 2CB9B9392601EF3700743730 /* UtilsMigrate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UtilsMigrate.swift; sourceTree = ""; }; - 2CBB5E0326333DD2000FA0A6 /* Notification.Name.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Notification.Name.swift; sourceTree = ""; }; - 2CC9CBC126413B9F002028BF /* UtilsSecret.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsSecret.swift; sourceTree = ""; }; - 2CC9CBD7264142FF002028BF /* KeychainServices.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainServices.swift; sourceTree = ""; }; - 2CDB5FF127822D7B0040BBA3 /* SqliteConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SqliteConfig.swift; sourceTree = ""; }; - 2F98D68124C9AAE400613A4C /* CapacitorSQLite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CapacitorSQLite.swift; sourceTree = ""; }; - 3B2A61DA5A1F2DD4F959604D /* Pods_Plugin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Plugin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 50ADFF88201F53D600D50D53 /* Plugin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Plugin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 50ADFF8C201F53D600D50D53 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 50ADFF91201F53D600D50D53 /* PluginTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PluginTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 50ADFF96201F53D600D50D53 /* CapacitorSQLitePluginTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CapacitorSQLitePluginTests.swift; sourceTree = ""; }; - 50ADFF98201F53D600D50D53 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 50ADFFA52020D75100D50D53 /* Capacitor.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Capacitor.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 50E1A94720377CB70090CE1A /* CapacitorSQLitePlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CapacitorSQLitePlugin.swift; sourceTree = ""; }; - 5E23F77F099397094342571A /* Pods-Plugin.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Plugin.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Plugin/Pods-Plugin.debug.xcconfig"; sourceTree = ""; }; - 91781294A431A2A7CC6EB714 /* Pods-Plugin.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Plugin.release.xcconfig"; path = "Pods/Target Support Files/Pods-Plugin/Pods-Plugin.release.xcconfig"; sourceTree = ""; }; - 96ED1B6440D6672E406C8D19 /* Pods-PluginTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PluginTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PluginTests/Pods-PluginTests.debug.xcconfig"; sourceTree = ""; }; - F65BB2953ECE002E1EF3E424 /* Pods-PluginTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PluginTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-PluginTests/Pods-PluginTests.release.xcconfig"; sourceTree = ""; }; - F6753A823D3815DB436415E3 /* Pods_PluginTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PluginTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 50ADFF84201F53D600D50D53 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 2C479B9225BD874C009B1A49 /* Security.framework in Frameworks */, - 50ADFFA42020D75100D50D53 /* Capacitor.framework in Frameworks */, - 03FC29A292ACC40490383A1F /* Pods_Plugin.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 50ADFF8E201F53D600D50D53 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 50ADFF92201F53D600D50D53 /* Plugin.framework in Frameworks */, - 20C0B05DCFC8E3958A738AF2 /* Pods_PluginTests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 2C3AF2F725B591BC00C5EF2F /* Utils */ = { - isa = PBXGroup; - children = ( - 2C3AF2F825B591ED00C5EF2F /* UtilsBinding.swift */, - 2C8C860C2A84376D001F9CB2 /* UtilsDelete.swift */, - 2CB4368628EEEFF500C973AA /* UtilsDownloadFromHTTP.swift */, - 2C3AF30525B592FD00C5EF2F /* UtilsDrop.swift */, - 2C3AF30925B5932B00C5EF2F /* UtilsEncryption.swift */, - 2C3AF30D25B5935B00C5EF2F /* UtilsFile.swift */, - 2C3AF31125B5938500C5EF2F /* UtilsJson.swift */, - 2CB9B9392601EF3700743730 /* UtilsMigrate.swift */, - 2C2352C3276C8195003978B4 /* UtilsNCDatabase.swift */, - 2CC9CBC126413B9F002028BF /* UtilsSecret.swift */, - 2C3AF31525B593B600C5EF2F /* UtilsSQLCipher.swift */, - 2C8C860A2A84373F001F9CB2 /* UtilsSQLStatement.swift */, - 2C3AF31925B593E500C5EF2F /* UtilsUpgrade.swift */, - ); - path = Utils; - sourceTree = ""; - }; - 2C772261262FF94E000C65E9 /* Extensions */ = { - isa = PBXGroup; - children = ( - 2C7E57202A38655600C04517 /* Array.swift */, - 2C7E571F2A38655600C04517 /* Data.swift */, - 2CBB5E0326333DD2000FA0A6 /* Notification.Name.swift */, - 2C772262262FF971000C65E9 /* String.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - 2CB9B9302601EEE500743730 /* ImportExportJson */ = { - isa = PBXGroup; - children = ( - 2CB9B9332601EEE500743730 /* ExportToJson.swift */, - 2C97B3FE2A6E999800A979E8 /* ImportData.swift */, - 2CB9B9322601EEE500743730 /* ImportFromJson.swift */, - 2CB9B9312601EEE500743730 /* JsonSQLite.swift */, - ); - path = ImportExportJson; - sourceTree = ""; - }; - 2CC9CBD6264142CB002028BF /* Models */ = { - isa = PBXGroup; - children = ( - 2CC9CBD7264142FF002028BF /* KeychainServices.swift */, - ); - path = Models; - sourceTree = ""; - }; - 50ADFF7E201F53D600D50D53 = { - isa = PBXGroup; - children = ( - 50ADFF8A201F53D600D50D53 /* Plugin */, - 50ADFF95201F53D600D50D53 /* PluginTests */, - 50ADFF89201F53D600D50D53 /* Products */, - 8C8E7744173064A9F6D438E3 /* Pods */, - A797B9EFA3DCEFEA1FBB66A9 /* Frameworks */, - ); - sourceTree = ""; - }; - 50ADFF89201F53D600D50D53 /* Products */ = { - isa = PBXGroup; - children = ( - 50ADFF88201F53D600D50D53 /* Plugin.framework */, - 50ADFF91201F53D600D50D53 /* PluginTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 50ADFF8A201F53D600D50D53 /* Plugin */ = { - isa = PBXGroup; - children = ( - 2CC9CBD6264142CB002028BF /* Models */, - 2C772261262FF94E000C65E9 /* Extensions */, - 2CB9B9302601EEE500743730 /* ImportExportJson */, - 2C3AF2F725B591BC00C5EF2F /* Utils */, - 2F98D68124C9AAE400613A4C /* CapacitorSQLite.swift */, - 50E1A94720377CB70090CE1A /* CapacitorSQLitePlugin.swift */, - 50ADFF8C201F53D600D50D53 /* Info.plist */, - 2CB89AE227C57603001F464B /* BiometricIDAuthentication.swift */, - 2C3AF2F325B58EC400C5EF2F /* Database.swift */, - 2C3AF2EF25B58E8500C5EF2F /* GlobalSQLite.swift */, - 2C3AF2EB25B58C3400C5EF2F /* ReturnHandler.swift */, - 2CDB5FF127822D7B0040BBA3 /* SqliteConfig.swift */, - ); - path = Plugin; - sourceTree = ""; - }; - 50ADFF95201F53D600D50D53 /* PluginTests */ = { - isa = PBXGroup; - children = ( - 50ADFF96201F53D600D50D53 /* CapacitorSQLitePluginTests.swift */, - 50ADFF98201F53D600D50D53 /* Info.plist */, - ); - path = PluginTests; - sourceTree = ""; - }; - 8C8E7744173064A9F6D438E3 /* Pods */ = { - isa = PBXGroup; - children = ( - 5E23F77F099397094342571A /* Pods-Plugin.debug.xcconfig */, - 91781294A431A2A7CC6EB714 /* Pods-Plugin.release.xcconfig */, - 96ED1B6440D6672E406C8D19 /* Pods-PluginTests.debug.xcconfig */, - F65BB2953ECE002E1EF3E424 /* Pods-PluginTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; - A797B9EFA3DCEFEA1FBB66A9 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2C479B9125BD874C009B1A49 /* Security.framework */, - 50ADFFA52020D75100D50D53 /* Capacitor.framework */, - 3B2A61DA5A1F2DD4F959604D /* Pods_Plugin.framework */, - F6753A823D3815DB436415E3 /* Pods_PluginTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 50ADFF85201F53D600D50D53 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 50ADFF87201F53D600D50D53 /* Plugin */ = { - isa = PBXNativeTarget; - buildConfigurationList = 50ADFF9C201F53D600D50D53 /* Build configuration list for PBXNativeTarget "Plugin" */; - buildPhases = ( - AB5B3E54B4E897F32C2279DA /* [CP] Check Pods Manifest.lock */, - 50ADFF83201F53D600D50D53 /* Sources */, - 50ADFF84201F53D600D50D53 /* Frameworks */, - 50ADFF85201F53D600D50D53 /* Headers */, - 50ADFF86201F53D600D50D53 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Plugin; - productName = Plugin; - productReference = 50ADFF88201F53D600D50D53 /* Plugin.framework */; - productType = "com.apple.product-type.framework"; - }; - 50ADFF90201F53D600D50D53 /* PluginTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 50ADFF9F201F53D600D50D53 /* Build configuration list for PBXNativeTarget "PluginTests" */; - buildPhases = ( - 0596884F929ED6F1DE134961 /* [CP] Check Pods Manifest.lock */, - 50ADFF8D201F53D600D50D53 /* Sources */, - 50ADFF8E201F53D600D50D53 /* Frameworks */, - 50ADFF8F201F53D600D50D53 /* Resources */, - 8E97F58B69A94C6503FC9C85 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 50ADFF94201F53D600D50D53 /* PBXTargetDependency */, - ); - name = PluginTests; - productName = PluginTests; - productReference = 50ADFF91201F53D600D50D53 /* PluginTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 50ADFF7F201F53D600D50D53 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1160; - ORGANIZATIONNAME = "Max Lynch"; - TargetAttributes = { - 50ADFF87201F53D600D50D53 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1100; - ProvisioningStyle = Automatic; - }; - 50ADFF90201F53D600D50D53 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1100; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = 50ADFF82201F53D600D50D53 /* Build configuration list for PBXProject "Plugin" */; - compatibilityVersion = "Xcode 8.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 50ADFF7E201F53D600D50D53; - productRefGroup = 50ADFF89201F53D600D50D53 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 50ADFF87201F53D600D50D53 /* Plugin */, - 50ADFF90201F53D600D50D53 /* PluginTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 50ADFF86201F53D600D50D53 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 50ADFF8F201F53D600D50D53 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 0596884F929ED6F1DE134961 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-PluginTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8E97F58B69A94C6503FC9C85 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-PluginTests/Pods-PluginTests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Capacitor/Capacitor.framework", - "${BUILT_PRODUCTS_DIR}/CapacitorCordova/Cordova.framework", - "${BUILT_PRODUCTS_DIR}/SQLCipher/SQLCipher.framework", - "${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Capacitor.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Cordova.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SQLCipher.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZIPFoundation.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PluginTests/Pods-PluginTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - AB5B3E54B4E897F32C2279DA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Plugin-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 50ADFF83201F53D600D50D53 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2CBB5E0426333DD2000FA0A6 /* Notification.Name.swift in Sources */, - 2CB9B9342601EEE500743730 /* JsonSQLite.swift in Sources */, - 2C3AF30625B592FD00C5EF2F /* UtilsDrop.swift in Sources */, - 2C3AF2F425B58EC400C5EF2F /* Database.swift in Sources */, - 2CB9B9352601EEE500743730 /* ImportFromJson.swift in Sources */, - 2C8C860D2A84376D001F9CB2 /* UtilsDelete.swift in Sources */, - 2C7E57222A38655600C04517 /* Array.swift in Sources */, - 2C3AF2EC25B58C3400C5EF2F /* ReturnHandler.swift in Sources */, - 2CDB5FF227822D7B0040BBA3 /* SqliteConfig.swift in Sources */, - 50E1A94820377CB70090CE1A /* CapacitorSQLitePlugin.swift in Sources */, - 2C3AF2F025B58E8500C5EF2F /* GlobalSQLite.swift in Sources */, - 2C3AF30E25B5935B00C5EF2F /* UtilsFile.swift in Sources */, - 2CC9CBD8264142FF002028BF /* KeychainServices.swift in Sources */, - 2C97B3FF2A6E999800A979E8 /* ImportData.swift in Sources */, - 2C3AF2F925B591ED00C5EF2F /* UtilsBinding.swift in Sources */, - 2C3AF31625B593B600C5EF2F /* UtilsSQLCipher.swift in Sources */, - 2CC9CBC226413B9F002028BF /* UtilsSecret.swift in Sources */, - 2C7E57212A38655600C04517 /* Data.swift in Sources */, - 2C3AF30A25B5932B00C5EF2F /* UtilsEncryption.swift in Sources */, - 2F98D68224C9AAE500613A4C /* CapacitorSQLite.swift in Sources */, - 2C772263262FF971000C65E9 /* String.swift in Sources */, - 2CB9B93A2601EF3700743730 /* UtilsMigrate.swift in Sources */, - 2CB4368728EEEFF500C973AA /* UtilsDownloadFromHTTP.swift in Sources */, - 2C8C860B2A84373F001F9CB2 /* UtilsSQLStatement.swift in Sources */, - 2C3AF31A25B593E500C5EF2F /* UtilsUpgrade.swift in Sources */, - 2C3AF31225B5938500C5EF2F /* UtilsJson.swift in Sources */, - 2CB89AE327C57603001F464B /* BiometricIDAuthentication.swift in Sources */, - 2CB9B9362601EEE500743730 /* ExportToJson.swift in Sources */, - 2C2352C4276C8195003978B4 /* UtilsNCDatabase.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 50ADFF8D201F53D600D50D53 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 50ADFF97201F53D600D50D53 /* CapacitorSQLitePluginTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 50ADFF94201F53D600D50D53 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 50ADFF87201F53D600D50D53 /* Plugin */; - targetProxy = 50ADFF93201F53D600D50D53 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 50ADFF9A201F53D600D50D53 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - 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_DOCUMENTATION_COMMENTS = YES; - 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_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ( - "\"${BUILT_PRODUCTS_DIR}/Capacitor\"", - "\"${BUILT_PRODUCTS_DIR}/CapacitorCordova\"", - ); - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 50ADFF9B201F53D600D50D53 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - 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_DOCUMENTATION_COMMENTS = YES; - 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_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "\"${BUILT_PRODUCTS_DIR}/Capacitor\"", - "\"${BUILT_PRODUCTS_DIR}/CapacitorCordova\"", - ); - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 50ADFF9D201F53D600D50D53 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5E23F77F099397094342571A /* Pods-Plugin.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Plugin/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(FRAMEWORK_SEARCH_PATHS)\n$(FRAMEWORK_SEARCH_PATHS)\n$(FRAMEWORK_SEARCH_PATHS)"; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = ( - "$(inherited)", - "-DSQLITE_HAS_CODEC", - "-DSQLITE_TEMP_STORE=2", - "-DSQLITE_SOUNDEX", - "-DSQLITE_THREADSAFE", - "-DSQLITE_ENABLE_RTREE", - "-DSQLITE_ENABLE_STAT3", - "-DSQLITE_ENABLE_STAT4", - "-DSQLITE_ENABLE_COLUMN_METADATA", - "-DSQLITE_ENABLE_MEMORY_MANAGEMENT", - "-DSQLITE_ENABLE_LOAD_EXTENSION", - "-DSQLITE_ENABLE_FTS4", - "-DSQLITE_ENABLE_FTS4_UNICODE61", - "-DSQLITE_ENABLE_FTS3_PARENTHESIS", - "-DSQLITE_ENABLE_UNLOCK_NOTIFY", - "-DSQLITE_ENABLE_JSON1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLCIPHER_CRYPTO_CC", - "-DHAVE_USLEEP=1", - "-DSQLITE_MAX_VARIABLE_NUMBER=99999", - "-DHAVE_GETHOSTUUID=0", - ); - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DHAVE_GETHOSTUUID=0", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.getcapacitor.Plugin; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - SUPPORTS_MACCATALYST = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 50ADFF9E201F53D600D50D53 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 91781294A431A2A7CC6EB714 /* Pods-Plugin.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Plugin/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(FRAMEWORK_SEARCH_PATHS)"; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ( - "$(inherited)", - "-DSQLITE_HAS_CODEC", - "-DSQLITE_TEMP_STORE=2", - "-DSQLITE_SOUNDEX", - "-DSQLITE_THREADSAFE", - "-DSQLITE_ENABLE_RTREE", - "-DSQLITE_ENABLE_STAT3", - "-DSQLITE_ENABLE_STAT4", - "-DSQLITE_ENABLE_COLUMN_METADATA", - "-DSQLITE_ENABLE_MEMORY_MANAGEMENT", - "-DSQLITE_ENABLE_LOAD_EXTENSION", - "-DSQLITE_ENABLE_FTS4", - "-DSQLITE_ENABLE_FTS4_UNICODE61", - "-DSQLITE_ENABLE_FTS3_PARENTHESIS", - "-DSQLITE_ENABLE_UNLOCK_NOTIFY", - "-DSQLITE_ENABLE_JSON1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLCIPHER_CRYPTO_CC", - "-DHAVE_USLEEP=1", - "-DSQLITE_MAX_VARIABLE_NUMBER=99999", - "-DHAVE_GETHOSTUUID=0", - ); - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DHAVE_GETHOSTUUID=0", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.getcapacitor.Plugin; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - SUPPORTS_MACCATALYST = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 50ADFFA0201F53D600D50D53 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 96ED1B6440D6672E406C8D19 /* Pods-PluginTests.debug.xcconfig */; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = PluginTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.getcapacitor.PluginTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 50ADFFA1201F53D600D50D53 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F65BB2953ECE002E1EF3E424 /* Pods-PluginTests.release.xcconfig */; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = PluginTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.getcapacitor.PluginTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 50ADFF82201F53D600D50D53 /* Build configuration list for PBXProject "Plugin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 50ADFF9A201F53D600D50D53 /* Debug */, - 50ADFF9B201F53D600D50D53 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 50ADFF9C201F53D600D50D53 /* Build configuration list for PBXNativeTarget "Plugin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 50ADFF9D201F53D600D50D53 /* Debug */, - 50ADFF9E201F53D600D50D53 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 50ADFF9F201F53D600D50D53 /* Build configuration list for PBXNativeTarget "PluginTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 50ADFFA0201F53D600D50D53 /* Debug */, - 50ADFFA1201F53D600D50D53 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 50ADFF7F201F53D600D50D53 /* Project object */; -} diff --git a/ios/Plugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Plugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6..00000000 --- a/ios/Plugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/ios/Plugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Plugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/ios/Plugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/ios/Plugin.xcodeproj/xcshareddata/xcschemes/Plugin.xcscheme b/ios/Plugin.xcodeproj/xcshareddata/xcschemes/Plugin.xcscheme deleted file mode 100644 index 901886c9..00000000 --- a/ios/Plugin.xcodeproj/xcshareddata/xcschemes/Plugin.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/Plugin.xcodeproj/xcshareddata/xcschemes/PluginTests.xcscheme b/ios/Plugin.xcodeproj/xcshareddata/xcschemes/PluginTests.xcscheme deleted file mode 100644 index fca4e2b2..00000000 --- a/ios/Plugin.xcodeproj/xcshareddata/xcschemes/PluginTests.xcscheme +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/Plugin.xcworkspace/contents.xcworkspacedata b/ios/Plugin.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index afad624e..00000000 --- a/ios/Plugin.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/ios/Plugin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Plugin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/ios/Plugin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/ios/Plugin.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Plugin.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/ios/Plugin.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/ios/Podfile b/ios/Podfile deleted file mode 100644 index 38f61387..00000000 --- a/ios/Podfile +++ /dev/null @@ -1,21 +0,0 @@ -platform :ios, '15.0' - -def capacitor_pods - # Comment the next line if you're not using Swift and don't want to use dynamic frameworks - use_frameworks! - pod 'Capacitor', :path => '../node_modules/@capacitor/ios' - pod 'CapacitorCordova', :path => '../node_modules/@capacitor/ios' -end - -target 'Plugin' do - capacitor_pods - pod 'SQLCipher', '~>4.5.6' - pod 'ZIPFoundation', '~> 0.9.18' -end - -target 'PluginTests' do - capacitor_pods - pod 'SQLCipher', '~>4.5.6' - pod 'ZIPFoundation', '~> 0.9.18' -end - From 6791de6e28e7dc7c5519659ee4f651e49d8287fd Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Sun, 2 Aug 2026 03:18:17 +0800 Subject: [PATCH 4/7] docs(ios): document the Swift Package Manager and CocoaPods paths Both integrations are supported and they link different SQLCipher versions, which a consumer cannot infer from anything currently written down. State the difference plainly: SQLCipher 4.17.0 and a SQLite 3.53.3 baseline on Swift Package Manager, 4.10.0 and 3.50.4 on CocoaPods, with the reason the latter cannot move and a pointer to npx cap spm-migration-assistant for projects that want to cross over. CONTRIBUTING gains the two iOS gates, the fact that the unit tests are compiled but not run by verify:ios, and the command to run them locally. --- CONTRIBUTING.md | 17 +++++++++++++++++ README.md | 32 +++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ce31fd42..83e4cef2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,6 +19,12 @@ This guide provides instructions for contributing to this Capacitor plugin. brew install swiftlint ``` +4. On macOS, the iOS side is a Swift package. Open `Package.swift` in Xcode to work on it. There is no CocoaPods workspace to generate first. + + ```shell + xed . + ``` + ### Scripts #### `npm run build` @@ -35,6 +41,17 @@ Build and validate the web and native projects. This is useful to run in CI to verify that the plugin builds for all platforms. +On iOS this is two gates, both of which also run in CI: + +- `npm run verify:ios` builds the Swift package, library and test target, for an iOS Simulator destination. This is the maintained iOS path. +- `npm run verify:ios:pod` runs `pod lib lint` against `CapacitorCommunitySqlite.podspec`, which is the CocoaPods compatibility path kept for existing consumers. See the iOS section of the README for why that path is frozen. + +The iOS unit tests are built by `verify:ios` but not run by it, because running them needs a named simulator rather than a generic destination. To run them locally, pick one that exists on your machine: + +```shell +xcodebuild test -scheme CapacitorCommunitySqlite -destination 'platform=iOS Simulator,name=iPhone 17 Pro' +``` + #### `npm run lint` / `npm run fmt` Check formatting and code quality, autoformat/autofix if possible. diff --git a/README.md b/README.md index 42e2ed90..08dbb233 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,8 @@ pnpm install --save sql.js npx cap sync ``` +On iOS the plugin supports both Swift Package Manager and CocoaPods, and the two link different `SQLCipher` versions. See [IOS Quirks](#ios-quirks) before you create the iOS project. + then add plugin to main `capacitor.config.ts` file: ```ts @@ -212,6 +214,34 @@ npm install --save-dev electron-builder@24.6.4 - on iOS, no further steps needed. +### Dependency manager: Swift Package Manager or CocoaPods + +The iOS side of this plugin ships both a Swift package (`Package.swift`) and a CocoaPods podspec (`CapacitorCommunitySqlite.podspec`). Capacitor picks one when the iOS project is created, and that choice decides which `SQLCipher` build your app links, and therefore which SQLite version it runs. + +**Swift Package Manager (recommended).** This is what `npx cap add ios` uses by default in Capacitor 8, and it is the path this repository builds in CI. + +``` +npx cap add ios +``` + +It resolves `SQLCipher` through [SQLCipher.swift](https://github.com/sqlcipher/SQLCipher.swift), pinned to 4.17.0, whose SQLite baseline is 3.53.3. That is the same SQLCipher release the Android side uses (`net.zetetic:sqlcipher-android:4.17.0`), so both native platforms stay on one SQLite generation. + +**CocoaPods (still supported, but frozen).** Existing projects keep working unchanged, and a new project can still opt in: + +``` +npx cap add ios --packagemanager CocoaPods +``` + +The podspec pins `SQLCipher` to 4.10.0, whose SQLite baseline is 3.50.4. That pin is a ceiling rather than a preference: SQLCipher 4.11.0 removed CocoaPods support ("Removes CocoaPods support (`SQLCipher.podspec.json`)" in its CHANGELOG, October 2025), so 4.10.0 is the last version published to the CocoaPods trunk and no newer SQLCipher can reach this path. + +The practical difference is the SQLite baseline: 3.53.3 on Swift Package Manager against 3.50.4 on CocoaPods. Both are encrypted by SQLCipher and both are supported; only the Swift Package Manager path will keep moving. + +To move an existing CocoaPods project across, Capacitor ships an assistant: + +``` +npx cap spm-migration-assistant +``` + ## Supported Methods by Platform @@ -367,7 +397,7 @@ npm install --save-dev electron-builder@24.6.4 ## Dependencies -The iOS and Android codes are using `SQLCipher` allowing for database encryption. +The iOS and Android codes are using `SQLCipher` allowing for database encryption. On iOS the version depends on the dependency manager, see [IOS Quirks](#ios-quirks). The iOS code is using `ZIPFoundation` for unzipping assets files The Electron code is using `better-sqlite3-multiple-ciphers` , `electron-json-storage` and `node-fetch` from 5.0.4. The Web code is using the Stencil component `jeep-sqlite` based on `sql.js`, `localforage`. and `jszip` From 97ccdfbba8545490833a3b7da88fe2fdd6eab833 Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Sun, 2 Aug 2026 03:37:35 +0800 Subject: [PATCH 5/7] fix(ios): clear the compiler warnings in the plugin sources Five warnings, each fixed without changing behaviour. BiometricIDAuthentication: @unknown default does not cover a case the SDK declares, so LABiometryType.opticID made the switch non-exhaustive. It is handled explicitly and throws the same message it already produced through the default arm. It is unreachable in any case, since the package and the podspec are iOS only. UtilsDownloadFromHTTP and UtilsFile: ZIPFoundation's Archive(url:accessMode: preferredEncoding:) is deprecated in favour of a throwing initialiser. The two overloads differ only in a defaulted third label, so the call had to name pathEncoding to select the replacement; try? then yields the optional the surrounding guard already expects. The deprecated initialiser's body is try? self.init(url:accessMode:pathEncoding:), so this is the same call. UtilsSQLCipher and UtilsSQLStatement: two immutables that are computed and never read, from pure functions, so the lines are removed. --- ios/Plugin/BiometricIDAuthentication.swift | 5 +++++ ios/Plugin/Utils/UtilsDownloadFromHTTP.swift | 2 +- ios/Plugin/Utils/UtilsFile.swift | 2 +- ios/Plugin/Utils/UtilsSQLCipher.swift | 1 - ios/Plugin/Utils/UtilsSQLStatement.swift | 1 - 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ios/Plugin/BiometricIDAuthentication.swift b/ios/Plugin/BiometricIDAuthentication.swift index bad8e857..0d1a3521 100644 --- a/ios/Plugin/BiometricIDAuthentication.swift +++ b/ios/Plugin/BiometricIDAuthentication.swift @@ -39,6 +39,11 @@ class BiometricIDAuthentication { return .touchID case .faceID: return .faceID + case .opticID: + // Not reachable on iOS. Handled explicitly so the switch stays exhaustive; the + // behaviour is the same as before `opticID` became a known case. + let msg = "Biometric type not implemented" + throw BiometricIDAuthenticationError.biometricType(message: msg) @unknown default: let msg = "Biometric type not implemented" throw BiometricIDAuthenticationError.biometricType(message: msg) diff --git a/ios/Plugin/Utils/UtilsDownloadFromHTTP.swift b/ios/Plugin/Utils/UtilsDownloadFromHTTP.swift index 12bd71d2..c12d6647 100644 --- a/ios/Plugin/Utils/UtilsDownloadFromHTTP.swift +++ b/ios/Plugin/Utils/UtilsDownloadFromHTTP.swift @@ -164,7 +164,7 @@ class UtilsDownloadFromHTTP { do { let destinationURL = zipFile.deletingLastPathComponent() - guard let archive = Archive(url: zipFile, accessMode: .read) else { + guard let archive = try? Archive(url: zipFile, accessMode: .read, pathEncoding: nil) else { let msg = "Failed in reading Archive" completion([], UtilsDownloadError.invalidArchive(message: msg)) return diff --git a/ios/Plugin/Utils/UtilsFile.swift b/ios/Plugin/Utils/UtilsFile.swift index 28ca7935..0f473233 100644 --- a/ios/Plugin/Utils/UtilsFile.swift +++ b/ios/Plugin/Utils/UtilsFile.swift @@ -425,7 +425,7 @@ class UtilsFile { overwrite: Bool) throws { do { let zipAsset: URL = fromURL.appendingPathComponent(zip) - guard let archive = Archive(url: zipAsset, accessMode: .read) else { + guard let archive = try? Archive(url: zipAsset, accessMode: .read, pathEncoding: nil) else { let msg = "Error: Read Archive: \(zipAsset) failed" print("\(msg)") throw UtilsFileError.unzipToDatabaseFailed(message: msg) diff --git a/ios/Plugin/Utils/UtilsSQLCipher.swift b/ios/Plugin/Utils/UtilsSQLCipher.swift index 772bf438..48159c3e 100644 --- a/ios/Plugin/Utils/UtilsSQLCipher.swift +++ b/ios/Plugin/Utils/UtilsSQLCipher.swift @@ -891,7 +891,6 @@ class UtilsSQLCipher { } sqlStmt = resArr.joined(separator: ";") } - let curTime = UtilsDelete.getCurrentTimeAsInteger() let returnCode: Int32 = sqlite3_exec(mDB.mDb, sqlStmt, nil, nil, nil) if returnCode != SQLITE_OK { diff --git a/ios/Plugin/Utils/UtilsSQLStatement.swift b/ios/Plugin/Utils/UtilsSQLStatement.swift index 10c5d37c..7e8091fb 100644 --- a/ios/Plugin/Utils/UtilsSQLStatement.swift +++ b/ios/Plugin/Utils/UtilsSQLStatement.swift @@ -546,7 +546,6 @@ class UtilsSQLStatement { return SQLStatementInfo(isReturning: false, stmtString: mStmt, resultString: "") } - let intParenthesisValue = mStmt.distance(from: mStmt.startIndex, to: closingParenthesisIndex) let substringAfterValues = stmt[closingParenthesisIndex...] var resultString = String(substringAfterValues) .trimmingCharacters(in: .whitespacesAndNewlines) From 8719271843cc19c8cba8f21957820ec3b70901a9 Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Sun, 2 Aug 2026 03:38:03 +0800 Subject: [PATCH 6/7] build(ios): lint the podspec with no warnings allowed The gate was added with --allow-warnings because pod lib lint failed validation on six warnings that all predate it. Five were compiler warnings in the plugin sources and are fixed in the preceding commit. The sixth is here: package.json carries the npm form of the repository URL, git+https://..., which CocoaPods parses as a git+https scheme and reports as not being an https link. Strip the prefix once and use the result for both homepage and source, leaving package.json alone. With that, pod lib lint passes clean, so the flag comes off and the CocoaPods gate is strict. --- CapacitorCommunitySqlite.podspec | 8 ++++++-- package.json | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CapacitorCommunitySqlite.podspec b/CapacitorCommunitySqlite.podspec index f844a310..1350ab14 100644 --- a/CapacitorCommunitySqlite.podspec +++ b/CapacitorCommunitySqlite.podspec @@ -2,14 +2,18 @@ require 'json' package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) +# package.json carries the npm form of the repository URL, `git+https://...`. CocoaPods parses +# this as a `git+https` scheme and warns that GitHub sources should use an `https` link. +repository_url = package['repository']['url'].sub(%r{\Agit\+}, '') + Pod::Spec.new do |s| s.name = 'CapacitorCommunitySqlite' s.version = package['version'] s.summary = package['description'] s.license = package['license'] - s.homepage = package['repository']['url'] + s.homepage = repository_url s.author = package['author'] - s.source = { :git => package['repository']['url'], :tag => s.version.to_s } + s.source = { :git => repository_url, :tag => s.version.to_s } s.source_files = 'ios/Plugin/**/*.{swift,h,m,c,cc,mm,cpp}' s.ios.deployment_target = '15.0' s.dependency 'Capacitor' diff --git a/package.json b/package.json index 8811cf35..f9dc45bb 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "scripts": { "verify": "npm run verify:ios && npm run verify:ios:pod && npm run verify:android && npm run verify:web && npm run verify:electron", "verify:ios": "xcodebuild build-for-testing -scheme CapacitorCommunitySqlite -destination 'generic/platform=iOS Simulator'", - "verify:ios:pod": "pod lib lint CapacitorCommunitySqlite.podspec --allow-warnings", + "verify:ios:pod": "pod lib lint CapacitorCommunitySqlite.podspec", "verify:android": "cd android && ./gradlew clean build test && cd ..", "verify:web": "npm run build", "verify:electron": "npm run build-electron", From 50236fffbb9223fd1399272baa31ada31f12e89b Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Sun, 2 Aug 2026 03:38:13 +0800 Subject: [PATCH 7/7] build: keep SwiftLint out of the Swift Package Manager checkouts @ionic/swiftlint-config excludes node_modules and ios/Pods but not .build, where Swift Package Manager checks its dependencies out, so npm run lint also linted ZIPFoundation and capacitor-swift-pm: 79 Swift files instead of 31, and 51 violations instead of 21. None of it is error severity today, but a dependency shipping one would fail the lint script for reasons unrelated to this repository. node-swiftlint reads its configuration through cosmiconfig, whose search order puts the package.json swiftlint key ahead of any config file, and the key is a bare module name with no way to extend it. So the key gives way to swiftlint.config.js, which spreads the same Ionic config and adds the one exclusion. --- package.json | 1 - swiftlint.config.js | 11 +++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 swiftlint.config.js diff --git a/package.json b/package.json index f9dc45bb..e56488c2 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,6 @@ "@capacitor/core": ">=8.0.0" }, "prettier": "@ionic/prettier-config", - "swiftlint": "@ionic/swiftlint-config", "eslintConfig": { "extends": "@ionic/eslint-config/recommended" }, diff --git a/swiftlint.config.js b/swiftlint.config.js new file mode 100644 index 00000000..297f4e79 --- /dev/null +++ b/swiftlint.config.js @@ -0,0 +1,11 @@ +// SwiftLint configuration, read by node-swiftlint. +// +// This is @ionic/swiftlint-config plus one exclusion. Swift Package Manager checks its +// dependencies out into `.build`, and linting those reports violations from third-party +// sources that have nothing to do with this repository. +const ionicSwiftlintConfig = require('@ionic/swiftlint-config'); + +module.exports = { + ...ionicSwiftlintConfig, + excluded: [...ionicSwiftlintConfig.excluded, '${PWD}/.build'], +};