Undefine symbols for architecture XXX
Update: 20161014
- 检查工程文件目录里面是否确实引入了相关的库
- 检查工程的
Linked Frameworks and Libraries
是否引入相应的 lib - 检查 Library search path 是否设置正确
Xcode8.x 安装 XVim 之后闪退,错误提示信息为关于签名
Update: 20160908
提示的 Exception 类型为:1
Exception Type: EXC_BAD_ACCESS (Code Signature Invalid)
Xcode8 安装 XVim 的时候会将签名去除掉,Xcode 无法对自身进行验证。解决方法是用自己的证书为 Xcode 重新签名。在 XVim 的 issues979 下可以看到另一个简便的解决方法, 不过我还没实践过:
如果采用自己证书重签名:1
codesign -f -s <证书ID> Xcode.app
运行之后终端可能会假死一段时间,只要等就好了。假如等待之后得到一个错误 unable to find utility "codesign_allocate"
, 可以尝试一下这里提到的解决方法:1
locate codesign_allocate
如果你没有生成相应的数据库,就按照提示去生成。完成之后再次运行上面的命令,会输出一堆路径。其中应该也会包含下面这个路径:1
/Library/Developer/CommandLineTools/usr/bin/codesign_allocate
将它添加到 PATH 变量中。当然这里应该是任一个路径都可以。在 ~/.zshrc(如果你没有使用 zsh,那就是 ~/.bashrc) 中添加:1
export PATH=$PATH:/Library/Developer/CommandLineTools/usr/bin/codesign_allocate
然后创建一个软链到 /usr/bin/ 中:1
sudo ln -s /Library/Developer/CommandLineTools/usr/bin/* /usr/bin/
之后再签名应该就没问题了。
iOS10.0 & Xcode8 beta 6, 工程 demo 无法访问网络
一开始工程使用的签名配置是团队名称 + 自动选择,后来手动指定了 provisioning 文件,就可以了。原因暂时有待查明。
pod install 时提示报错 Unable to find a specification
而工程的 podfile
中对这个仓库是这样指定的:1
pod 'WebViewJavascriptBridge', :git => 'https://github.com/gzkiwiinc/WebViewJavascriptBridge.git', :branch => 'master'
于是查了一下公司维护的自有版本仓库根目录下的 podspec
文件。要提一下的是,根据 cocoapods 文档,如果采用另外指定 source repo 的方式,那么 repo 的根目录下必须有一个 valid 的 podspec file:
clone 到本地之后用 pod spec lint
检查一下 podspec
文件是否正确,结果报了一个错:
看起来应该是 cocoapods 1.0.0 中废弃了这个旧的语法。修改成下面这样:1
s.platforms = { :ios => "5.0", :osx => "" }
修改完成提交之后,发觉仍然报错 Unable to find a specification
,仔细瞧了一下 log,指向的 commit 是并不是 master 分支上最新的 commit:1
Pre-downloading: `WebViewJavascriptBridge` from `https://github.com/gzkiwiinc/WebViewJavascriptBridge.git`, commit `f5e92dd1d49c67724719491ae0f7696026dff9c1`
而 podfile 中的声明并没有问题。没时间折腾了,只好强行指定一个 commit:1
pod 'WebViewJavascriptBridge', :git => 'https://github.com/gzkiwiinc/WebViewJavascriptBridge.git', :branch => 'master', :commit => 'xxxxx'
最后再 pod install,就跑通了。
总结:不要忽略官方文档,靠猜不如看文档。另外还有一个问题,为什么指定的 master 分支没有取到最新的提交
cocoaPods 提示 diff: /../Podfile.lock: No such file or directory
因为我刚刚将 podfile 修改了,增加了一些 target 指定。重新 pod install 之后会生成新的配置文件,而原来的配置文件会被删除。但是 cocoaPods 没有帮忙正确设置回来。pod install 的时候终端也有输出警告信息:
在工程目录中找到 Pods 文件夹,在 Target Support Files 文件夹中找到为各个 Target 生成的配置文件,将其重新引入工程:
在项目的 info 中将新的设置文件引入
问题就消失了
提示错误 ld: library not found for -lPods
同上,原因是:项目中增加了一个 Target,重新对 pod 增加了一些 pod target 的指定。重新 build 之后原来的库 libPods.a 会被删除。
解决方法说来也简单,直接在 Xcode 里将项目中对被删除的 .a 文件的引用删掉即可(红色)。说起来真是羞愧,一直没有注意到这点,Xcode 会对项目中引用的文件进行引入。如果缺失的图片资源那还好办,只会报一个警告;如果缺失的是库文件,直接编译不通过。
顺便一提,libPods-XXX.a 文件目录是在:1
/Users/用户名/Library/Developer/Xcode/DerivedData/项目名/Build/Products/Debug-iphonesimulator/libPods-XXX.a