菜鸟教程小白 发表于 2022-12-13 12:55:27

ios - 在 AppStore 应用程序中使用第三方框架会引入 iPhoneSimulator 位


                                            <p><p>我正在使用 Xcode 6.4 将第三方框架集成到我的 AppStore 应用程序中。第三方的框架是一个通用二进制文件,当我执行文件命令时,它具有以下内容:</p>

<pre><code>DeviceTester (for architecture i386):   Mach-O dynamically linked shared library i386
DeviceTester (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
DeviceTester (for architecture armv7):Mach-O dynamically linked shared library arm
DeviceTester (for architecture arm64):Mach-O 64-bit dynamically linked shared library
</code></pre>

<p>我已尝试将此框架添加为嵌入式二进制文件。这很好用,但是当我将“ipa”上传到 AppStore 时,它​​会提示 ipa 具有不受支持的架构,即模拟器部分。当我检查 ipa 文件时,我确实看到了一个“框架”文件夹,其中包含通用框架。但是对于我包括的任何其他框架,我都没有看到这一点。 Crashlytics/Fabric 等。所以这里有一些不正确的地方。 </p>

<p>我也尝试将它添加为框架,然后确保它处于复制阶段,但运行它会在设备上出现以下错误:</p>

<pre><code>dyld: Library not loaded: @rpath/DeviceTester.framework/DeviceTester
Referenced from: /var/mobil....
</code></pre>

<p>任何指针都很高兴,我今天花了一整天的时间试图弄清楚发生了什么没有运气.. 干杯。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>来自 <a href="http://www.openradar.me/radar?id=6409498411401216" rel="noreferrer noopener nofollow">Xcode 6.1.1 &amp; 6.2: iOS frameworks containing simulator slices can&#39;t be submitted to the App Store</a> .您需要从 fat 框架中删除模拟器切片才能提交到 AppStore。 </p>

<p>这是一个执行魔法的脚本。在构建步骤中添加一个运行脚本步骤,将其放在嵌入框架的步骤之后,将其设置为使用 <code>/bin/sh</code> 并输入以下脚本:</p>

<pre><code>APP_PATH=&#34;${TARGET_BUILD_DIR}/${WRAPPER_NAME}&#34;

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find &#34;$APP_PATH&#34; -name &#39;*.framework&#39; -type d | while read -r FRAMEWORK
do
   FRAMEWORK_EXECUTABLE_NAME=$(defaults read &#34;$FRAMEWORK/Info.plist&#34; CFBundleExecutable)
   FRAMEWORK_EXECUTABLE_PATH=&#34;$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME&#34;
   echo &#34;Executable is $FRAMEWORK_EXECUTABLE_PATH&#34;

    EXTRACTED_ARCHS=()

    for ARCH in $ARCHS
    do
      echo &#34;Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME&#34;
      lipo -extract &#34;$ARCH&#34; &#34;$FRAMEWORK_EXECUTABLE_PATH&#34; -o &#34;$FRAMEWORK_EXECUTABLE_PATH-$ARCH&#34;
      EXTRACTED_ARCHS+=(&#34;$FRAMEWORK_EXECUTABLE_PATH-$ARCH&#34;)
    done

    echo &#34;Merging extracted architectures: ${ARCHS}&#34;
    lipo -o &#34;$FRAMEWORK_EXECUTABLE_PATH-merged&#34; -create &#34;${EXTRACTED_ARCHS[@]}&#34;
    rm &#34;${EXTRACTED_ARCHS[@]}&#34;

    echo &#34;Replacing original executable with thinned version&#34;
    rm &#34;$FRAMEWORK_EXECUTABLE_PATH&#34;
    mv &#34;$FRAMEWORK_EXECUTABLE_PATH-merged&#34; &#34;$FRAMEWORK_EXECUTABLE_PATH&#34;

done
</code></pre>

<p>这个答案可能会解释你在问什么。
<a href="https://stackoverflow.com/a/31270427/4160199" rel="noreferrer noopener nofollow">https://stackoverflow.com/a/31270427/4160199</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 AppStore 应用程序中使用第三方框架会引入 iPhoneSimulator 位,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34347810/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34347810/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 AppStore 应用程序中使用第三方框架会引入 iPhoneSimulator 位