我通过CocoaPods将Facebook Tweaks添加到我的项目中,现在我想通过TestFlight与一些测试人员共享该应用程序。默认情况下,在发布版本(在归档用于分发时使用)中调用Tweaks,因此我执行了以下操作:
在预处理器宏中,我为宏调整FB_TWEAK_ENABLED
定义了不同的值,Facebook调整库使用它来启用和禁用它的使用。由于我肯定不想在Release配置中启用Tweaks(例如App Store),但我确实希望能够通过TestFlight分发启用Tweaks的应用程序,我在Debug和TestFlight配置中激活了Tweaks,但是不在发布配置中。
我确认通过在调试配置中将FB_TWEAK_ENABLED
在0和1之间切换来激活和停用调整。
到目前为止一切正常,我可以使用我的预处理器常量激活一个停用调整。我还验证了,使用不同的方案运行会按预期更改预处理器常量。
所以我可以在启用和不启用调整的情况下成功运行应用程序。但是当我尝试将其归档时,它会因链接器错误而失败:
Undefined symbols for architecture armv7:
"__FBTweakIdentifier", referenced from:
___30-[SUPConfirmPaymentView setup]_block_invoke_2 in SUPConfirmPaymentView.o
___30-[SUPConfirmPaymentView setup]_block_invoke_254 in SUPConfirmPaymentView.o
___30-[SUPConfirmPaymentView setup]_block_invoke_277 in SUPConfirmPaymentView.o
___30-[SUPConfirmPaymentView setup]_block_invoke_2102 in SUPConfirmPaymentView.o
___30-[SUPConfirmPaymentView setup]_block_invoke_2125 in SUPConfirmPaymentView.o
___30-[SUPConfirmPaymentView setup]_block_invoke_2150 in SUPConfirmPaymentView.o
___30-[SUPConfirmPaymentView setup]_block_invoke_2171 in SUPConfirmPaymentView.o
...
ld:找不到架构armv7的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
对于armv7s和arm64,还有更多这样的错误。
但我的项目,目标,以及Pods项目中的库和Pods项目本身都有Architctures
和Valid Architectures
设置为" arm64 armv7 armv7s"。
对于记录:我的SUPConfirmPaymentView setup
方法做了很多这样的调用:
// setup animation constants
FBTweakBind(self, beatEnlargementFactor, @"Confirm Payment View", @"Beat Animation", @"scale factor", 1.1, 1.0, 3.0);
但我不认为这是问题,因为它在调试版本中起作用,我想它只是链接器注意到错误的第一个地方。
那么做什么工作:
FB_TWEAK_ENABLED=1
FB_TWEAK_ENABLED=0
FB_TWEAK_ENABLED=0
FB_TWEAK_ENABLED=0
FB_TWEAK_ENABLED=0
什么不起作用
FB_TWEAK_ENABLED=1
FB_TWEAK_ENABLED=1
我不明白为什么它不起作用,因为它应该与Release配置相同(我从那里复制)并且确实有效,除了这个常量。并且使用该常量DOES的调试构建工作。
任何想法出了什么问题?
修改 感谢@alloy在CocoaPods上指出了这个问题:https://github.com/CocoaPods/CocoaPods/issues/1934#issuecomment-40132425 这似乎是相关的。
因此,我在问题讨论中使用了以下代码:
#if defined(DEBUG) && DEBUG
#warning DEBUG=1
#else
#warning DEBUG=0
#endif
并将其复制到SUPConfirmPaymentView.m。
结果如下:
通过粘贴代码我已经得到了Debug = 1,这是由于Xcode的连续编译(显然使用了DEBUG标志)。 但是当使用Archive我得到上面的结果时,据我所知,目标下面的那些警告都是由这一个Archive构建产生的吗?这意味着预处理器(?)将.m文件传递两次,一次使用DEBUG = 1,一次使用Debug = 0,这将解释问题。 但这提出了另外两个问题:
EDIT2:
我重新创建了我的" TestFlight"目标是@alloy建议的Debug目标的副本。它仍然没有构建,这可能是由于CocoaPods没有使用调试配置。
如何使其使用调试配置? @alloy提到了:debug
的一些内容,但我不知道如何使用它,也没有找到任何关于它的文档。
我当前的Podfile看起来像这样(项目不包括在内):
platform :ios, '7.0'
pod 'AFNetworking', '~> 2.0'
pod 'Tweaks'
我将如何使用:debug
语法使CocoaPods在调试配置中构建Tweaks库时将其用于我的' TestFlight'配置?
答案 0 :(得分:1)
我想你遇到了这个问题:https://github.com/CocoaPods/CocoaPods/issues/1934#issuecomment-40132425。
(我不会交叉粘贴一个长答案及其所有上下文,如果您在票证跟踪器上阅读该问题,那就更好了。)