我有一个iOS项目,其中iOS 6.0作为部署目标。它在Xcode和xcodebuilder(CI必需)下构建得很好。但是,客户现在希望项目仅适用于安装了iOS7 +的用户。
没问题,我只是增加部署目标号码吗?错!
在Xcode下,项目继续编译得很好。但是在xcodebuild下,项目无法编译,出现大量错误:
架构armv7的未定义符号:
“std :: string :: _ Rep :: _ S_empty_rep_storage”,引自: 在drmNativeInterface中
正在使用Adobe Primetime
,drmNativeInterface
是其中的一部分。
为了帮助隔离问题,我创建了一个全新的单屏幕项目并执行了以下更改:
添加了drmNativeInterface
框架以及项目在Xcode中构建所需的两个Apple提供的依赖项,MediaPlayer
和AVFoundation
到"Link Binary with Libraries"
。 Primetime文档也列出了其他依赖项,但是如果我添加它们没有区别 - 这些是在Xcode下成功构建所需的唯一2个。
用[{1}}替换有效的拱门"arm64 armv7 armv7s"
(尽管drmNativeInterface显然包含i386,x86_64,armv7s和arm64切片,甚至Xcode也不会编译项目,除非我为armv6切换arm64 )。
将两个配置的"armv6 armv7 armv7s"
设置为NO。
最后,将"Build Active Architecture Only"
添加到"-lstdc++ -ObjC -all_load"
。
除上述几个步骤外,该项目是单屏幕股票:没有添加任何代码。
Xcode会编译它,但xcodebuild不会。为了使xcodebuild能够编译它,我必须将部署目标切换到6.0,这会破坏客户端的请求。
CI xcodebuild命令包含一些参数,但这是我用于此测试项目的最小化命令:
xcodebuild -project
"Other Linker Flags"
-scheme"MyProject.xcodeproj"
我尝试添加"MyProject"
,FRAMEWORK_SEARCH_PATHS
和HEADER_SEARCH_PATHS
参数,以防xcodebuild无法使用项目文件中包含的路径,但这没有任何区别。
如果我从项目中删除ALWAYS_SEARCH_USER_PATHS
框架 - 仅保留2个基于Apple的依赖项 - 项目编译就可以正常编译Xcode和xcodebuild。但显然这不是解决方案,因为我需要这个框架!
有没有人知道造成这种情况的原因或解决办法?
**注意:**
关于项目将在Xcode而不是xcodebuilder中构建的SO有很多问题,但我找不到任何项目在xcodebuilder中构建的位置,只适用于一个部署目标而不适用于另一个。
提前致谢。
答案 0 :(得分:1)
链接libstdc ++库(在本例中,libstdc ++ 6.dylib确切)修复了问题。
答案 1 :(得分:1)
您丢失了libstdc++6.dylib
中的Link Binary With Libraries
只需添加它: