链接sqlite3时未找到Xcode 8符号

链接sqlite3时未找到Xcode 8符号,xcode,google-analytics,sqlite,cocoapods,sqlcipher,Xcode,Google Analytics,Sqlite,Cocoapods,Sqlcipher,我在witch有一个项目,我使用2个pod,一个使用SQLCipher的私有pod,以及使用系统sqlite3(-l“sqlite3”)的Google/Analytics 当我使用Xcode 7构建项目时,一切正常,但当我使用Xcode 8构建项目时,当尝试打开sqlite db时,应用程序崩溃,原因如下: dlopen(/usr/lib/libsqlite3.dylib, 0x00000001) dlopen(/usr/lib/libsqlite3.dylib) ==> 0x1feec4

我在witch有一个项目,我使用2个pod,一个使用SQLCipher的私有pod,以及使用系统sqlite3(-l“sqlite3”)的Google/Analytics

当我使用Xcode 7构建项目时,一切正常,但当我使用Xcode 8构建项目时,当尝试打开sqlite db时,应用程序崩溃,原因如下:

dlopen(/usr/lib/libsqlite3.dylib, 0x00000001)
dlopen(/usr/lib/libsqlite3.dylib) ==> 0x1feec4f0
dyld: lazy symbol binding failed: Symbol not found: _sqlite3_key
Referenced from: /var/containers/Bundle/Application/524A1D1F-CC6A-4F7C-B86F-CC65EAF17BD5/MyApp.app/MyApp
Expected in: /usr/lib/libsqlite3.dylib
测试:

|         | iOS 8 | iOS 9 | iOS 10 |
| Xcode 7 |  OK   |  OK   |   OK   |
| Xcode 8 | CRASH | CRASH |    *   |

* app didn't crash but could not open db
Xcode 8改变了什么?()

关于如何解决这个问题有什么建议吗?

不幸的是,同时使用依赖于sqlite3和SQLCipher的POD并不是SQLCipher真正支持的方案。您可能会查看这篇文章,其中包含供参考的指南,但您试图做的是高风险的。

如果使用pod导入,您可以添加安装后修改其他标志,删除iOS系统sqlite3链接标志l“sqlite3”

安装后的do安装程序|

installer.pods_project.targets.each do |target|
    puts "#{target.name}"    
    target.build_configurations.each do |config|
        xcconfig_path = config.base_configuration_reference.real_path
        puts xcconfig_path

        build_settings = Hash[*File.read(xcconfig_path).lines.map{|x| x.split(/\s*=\s*/, 2)}.flatten]

        if build_settings['OTHER_LDFLAGS']
            other_ldflags = build_settings['OTHER_LDFLAGS']

            puts other_ldflags

            if other_ldflags.include? '-l"sqlite3"'

                puts "find -l sqlite3"

                index = other_ldflags.index('-l"sqlite3"')
                length = '-l"sqlite3"'.length
                first_path = other_ldflags[0,index]
                last_path = other_ldflags[index+length..-1]
                exclude_ldflags = first_path + last_path

                puts exclude_ldflags

                build_settings['OTHER_LDFLAGS'] = exclude_ldflags
            end

            # write build_settings dictionary to xcconfig
            File.open(xcconfig_path, "w")
            build_settings.each do |key,value|
                File.open(xcconfig_path, "a") {|file| file.puts "#{key} = #{value}"}
            end
        end
    end
end
结束

大宗报价


我正在使用sqlCipher,遇到了以下问题
dyld:lazy符号绑定失败:未找到符号:\u sqlite3\u key
。我要做的是将
-all\u load
标志添加到项目
构建设置
->
其他链接器标志
,然后一切正常。希望这可能对某人有所帮助。:)

似乎表示iOS版本的sqlite3中不包括
sqlite3\u key()
。您还可以关闭此库的延迟加载吗?@Droppy您建议我如何关闭延迟加载?@Daniel我面临类似问题,请您建议您的解决方案@Droppy sqlite3_key()以前使用过X-code 7和iOS-9。升级到X-code 8和iOS-10后,这开始产生问题。你有什么建议吗@丹尼尔,你有什么解决这个问题的办法吗?我面临着同样的问题。Stephen,我也面临着类似的问题,任何关于我做错了什么的建议。你链接到的帖子中的问题是,每次打开数据库时都必须调用PRAGMA key=或sqlite3_key。