菜鸟教程小白 发表于 2022-12-12 21:24:35

ios - 存档时,Facebook调整了CocoaPods链接器错误


                                            <p>我通过CocoaPods将<a href="https://github.com/facebook/Tweaks" rel="noreferrer noopener nofollow">Facebook Tweaks</a>添加到了我的项目中,现在我想通过TestFlight与一些测试人员共享该应用程序。默认情况下,Tweaks在Release版本中被停用(在存档分发时使用),因此我执行了以下操作:<br><li>通过复制原始方案</li>创建了一个新方案“MyApp TestFlight”<li>在项目信息屏幕中添加了一个名为“TestFlight”的Build配置(除了预先配置的“Debug”和“Release”之外。当被问到我想继承哪个设置时,我使用了“Release”配置。)</li><li>在“MyApp Testflight”方案中,将用于“存档”的构建配置设置为“TestFlight”。 </li><li>在预处理器宏中,我为<code>FB_TWEAK_ENABLED</code>宏定义了不同的值,Facebook Tweaks库使用该值来启用和禁用它的用法。由于我当然不希望在Release配置中启用Tweaks(例如,对于App Store),但是我确实希望能够分发通过TestFlight启用了Tweaks的应用程序,因此我在Debug和TestFlight配置中激活了Tweaks,但在发布配置。<br> </li><li>我通过在Debug配置中将<code>FB_TWEAK_ENABLED</code>在0和1之间切换来验证激活和停用Tweaks的有效性。 </li><br>到目前为止,一切正常,我可以使用预处理程序常量激活停用Tweaks。我还验证了,使用不同的方案运行会按预期更改预处理器常量。<br><br>因此,无论是否启用Tweaks,我都可以成功运行该应用程序。但是,当我尝试对其进行存档时,它会失败并显示链接器错误:<br><pre><code>Undefined symbols for architecture armv7:
&#34;__FBTweakIdentifier&#34;, referenced from:
___30-_block_invoke_2 in SUPConfirmPaymentView.o
___30-_block_invoke_254 in SUPConfirmPaymentView.o
___30-_block_invoke_277 in SUPConfirmPaymentView.o
___30-_block_invoke_2102 in SUPConfirmPaymentView.o
___30-_block_invoke_2125 in SUPConfirmPaymentView.o
___30-_block_invoke_2150 in SUPConfirmPaymentView.o
___30-_block_invoke_2171 in SUPConfirmPaymentView.o
...
</code></pre><br>ld:找不到架构armv7的符号<br>clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)<br><br>对于armv7s和arm64,还有更多这样的错误。<br>但是我的项目,目标以及Pods项目中的库和Pods项目本身都已将<code>Architctures</code>和<code>Valid Architectures</code>设置为“arm64 armv7 armv7s”。<br><br>记录一下:我的<code>SUPConfirmPaymentView setup</code>方法做了很多这样的调用:<br><pre><code>// setup animation constants
FBTweakBind(self, beatEnlargementFactor, @&#34;Confirm Payment View&#34;, @&#34;Beat Animation&#34;, @&#34;scale factor&#34;, 1.1, 1.0, 3.0);
</code></pre><br>但是我不认为这是问题所在,因为它可以在调试版本中使用,我想这只是链接器注意到问题的第一位。<br><br>那么有效的方法是:<br><li>使用DEBUG配置在模拟器或设备上运行,该配置易于使用<code>FB_TWEAK_ENABLED=1</code> </li><li>使用DEBUG配置在模拟器或设备上运行,该配置易于使用<code>FB_TWEAK_ENABLED=0</code> </li><li>使用RELASE配置存档,其中<code>FB_TWEAK_ENABLED=0</code> </li><li>使用具有<code>FB_TWEAK_ENABLED=0</code> </li>的TestFlight配置在模拟器或设备上运行<li>使用TestFlight配置存档,该配置具有<code>FB_TWEAK_ENABLED=0</code> </li><br>什么不起作用<br><li>使用具有<code>FB_TWEAK_ENABLED=1</code> </li>的TestFlight配置在模拟器或设备上运行<li>使用TestFlight配置存档,该配置具有<code>FB_TWEAK_ENABLED=1</code> </li><br>我不明白为什么它不起作用,因为它应该与Release配置相同(我从中复制了它),并且确实起作用,除了这个常量之外。使用该常量的调试版本可以正常工作。<br><br>任何想法出什么事了吗?<br><br> <strong>编辑:</strong><br>感谢@alloy在CocoaPods上指出此问题:<a href="https://github.com/CocoaPods/CocoaPods/issues/1934#issuecomment-40132425" rel="noreferrer noopener nofollow">https://github.com/CocoaPods/CocoaPods/issues/1934#issuecomment-40132425</a><br>似乎有关。<br><br>因此,我从问题讨论中使用了以下代码:<br><pre><code>#if defined(DEBUG) &amp;&amp; DEBUG
#warning DEBUG=1
#else
#warning DEBUG=0
#endif
</code></pre><br>并将其复制到SUPConfirmPaymentView.m。<br><br>结果是这样的:<br><br>仅通过粘贴代码,我就已经为Debug = 1感到烦恼,这是由于Xcode的连续编译(显然使用DEBUG标志)。<br>但是,当使用Archive时,我得到的结果超出了我的理解,据Target所知,那些警告都来自于此Archive版本。这意味着预处理器(?)两次传递.m文件,一次是DEBUG = 1,一次是Debug = 0,这可以解释问题。<br>但这又引发了另外两个问题:<br><li>为什么它会两次传递.m文件,如果它只是一个.m文件,它应该只传递一次(我知道为什么.h文件会发生这种情况)</li><li>为什么DEBUG = 1?那是哪里来的</li><br> <strong>编辑2:</strong><br>按照@alloy的建议,我将“TestFlight”目标重新创建为“调试”目标的副本。它仍然没有构建,这很可能是由于CocoaPods没有使用调试配置。<br>如何使它使用调试配置? @alloy提到了有关<code>:debug</code>的内容,但是我不知道如何使用它,也没有找到有关它的任何文档。<br>我当前的Podfile看起来像这样(不包括项目):<br><pre><code>platform :ios, &#39;7.0&#39;
pod &#39;AFNetworking&#39;, &#39;~&gt; 2.0&#39;
pod &#39;Tweaks&#39;
</code></pre><br>当将其用于“TestFlight”配置时,如何使用<code>:debug</code>语法使CocoaPods在调试配置中构建Tweaks库?</p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p>我认为您正在遇到这个问题:<a href="https://github.com/CocoaPods/CocoaPods/issues/1934#issuecomment-40132425" rel="noreferrer noopener nofollow">https://github.com/CocoaPods/CocoaPods/issues/1934#issuecomment-40132425</a>。<br><br>(我不会交叉粘贴一个很长的答案及其所有上下文,最好是在票务跟踪器上阅读该问题。)</p>
                                   
                                                <p style="font-size: 20px;">关于ios - 存档时,Facebook调整了CocoaPods链接器错误,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23013858/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23013858/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 存档时,Facebook调整了CocoaPods链接器错误