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/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/CapacitorCommunitySqlite.podspec b/CapacitorCommunitySqlite.podspec index 47785126..1350ab14 100644 --- a/CapacitorCommunitySqlite.podspec +++ b/CapacitorCommunitySqlite.podspec @@ -2,18 +2,28 @@ 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' - 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: [ 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` 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/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) 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/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 - diff --git a/package.json b/package.json index c4139b73..e56488c2 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", "verify:android": "cd android && ./gradlew clean build test && cd ..", "verify:web": "npm run build", "verify:electron": "npm run build-electron", @@ -86,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'], +};