经过几天的搜索,我终于找到了解决方案!
1) 一旦你的 sqlite_extension.h 和 sqlite_extension.c 文件移动到你的 sqlite_extension 文件夹中
2) cd 到那个 sqlite_extension 文件夹
3) 使用以下代码编译您的代码:
gcc -g -fPIC -std=gnu99 -current_version 1.0 -compatibility_version 1.0 -dynamiclib -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk sqlite_extension.c -o sqlite_extension.dylib
您可能需要更改 ../iPhoneOSN.M.sdk 之类的 SDK 路径,其中 N.M 表示 iOS 的最后可用版本,请查看文件夹“/Applications/Xcode.app/Contents/Developer/ Platforms/iPhoneOS.platform/Developer/SDKs/" 来查找现有路径
4) 您可以使用以下命令检查生成的文件:
file /path/to/your/sqlite_extension.dylib
应该返回类似:
/./././sqlite_extension.dylib (for architecture armv7): Mach-O dynamically linked shared library arm
/./././sqlite_extension.dylib (for architecture arm64): Mach-O 64-bit dynamically linked shared library
或者使用更详细的:
otool -l sqlite_extension.dylib
5) 现在您的库需要使用与嵌入应用程序相同的身份进行代码签名,您可以使用以下方法:
codesign -fs "your_apple_identity" sqlite_extension.dylib
your_apple_identity 的格式可以是“your_name: your_apple_login_email@address.xxx”
确保最好的方法是从使用 Xcode 在您的设备上编译和运行的嵌入式应用程序可执行文件中复制一个,或者使用以下命令复制计算机上的存档:
codesign --display --verbose=4 ~/Library/Developer/Xcode/Archives/2016-09-25/YourApp\ 25-09-2016\ 12.00.xcarchive/Products/Applications/YourApp.app/YourApp
用于代替“your_apple_identity”的字符串是在第一次出现 Authority= 之后找到的字符串
6) 库代码签名后,您可以使用相同的命令检查是否获得了与您的应用相似的签名信息:
codesign --display --verbose=4 sqlite_extension.dylib
7) 您的库现在已准备好嵌入到您的应用程序中,您只需确保 Xcode 刷新您的库文件(如果您曾尝试使用以前的同名文件)。为此,您可以删除以前的文件,在您的设备上编译和运行,放回新文件,确保它在“复制捆绑资源”中,而不是在应用程序的“构建阶段”选项卡的“链接二进制文件”中
当您的应用请求 SQLite 使用它时,您的扩展程序应该会正确加载
iOS 9.3.5
Xcode 8.0
SQLite 3.9.2