当前位置:  开发笔记 > IOS > 正文

如何在不使用脚本去除模拟器切片的情况下创建动态框架

如何解决《如何在不使用脚本去除模拟器切片的情况下创建动态框架》经验,为你挑选了1个好方法。

我想创建一个动态框架并分发它.它需要在模拟器,iPhone设备上运行时工作,并能够提交到App Store.

我知道lipo感谢本指南.它展示了我们如何将模拟器架构与iphone架构结合到一个动态框架中,该框架可以在不分发源代码的情况下进行分发.它允许我使用模拟器和iPhone设备的框架.但是,当我尝试将其发送到App Store时由于模拟器构建而失败.

Carthage提供了一个有趣的解决方案 它创建了一个适用于模拟器和iPhone的框架.但是当它是时候将它发送到App Store时,我们需要运行一个脚本来撕掉模拟器切片.

但是,DFP广告管理系统(DFP)的创建者已经找到了一种方法来创建适用于模拟器和设备的框架; 通过App Store提交; 并且不需要任何脚本来撕掉模拟器切片(AFAIK).我真正需要做的就是将GoogleMobileAds.framework文件拖入Linked Frameworks and Libraries.我不需要Embedded Binaries像大多数动态框架那样添加它,这有点令人惊讶)

我创建了一个使用DFP的示例项目来演示这一点.

// clone repository
git clone --recursive https://github.com/wh1pch81n/DoubleClickGoogleExample.git

// Move to correct branch
git submodule foreach 'git checkout master'
git submodule foreach 'git pull origin master' 

现在您可以选择Simulation_mate方案并运行应用程序.该应用将在底部显示一个广告横幅,以显示广告实际正在运行.

依赖图看起来像这样.

Simulation_mate.app
   -> Mate.framework
      -> DFP.framework
         -> GoogleMobileAds.framework

同样,我可以在模拟器,iPhone上运行Simulation_mate,并可以将其提交到App Store.

我的问题是,他们是如何创建这样的GoogleMobileAds.framework的?创建这样的框架需要遵循哪些步骤?



1> Leo Natan--r..:

正如所怀疑的那样,GoogleMobileAds.framework是一个静态框架,而不是一个动态框架.

> file GoogleMobileAds
GoogleMobileAds: Mach-O universal binary with 5 architectures: [arm_v7: current ar archive] [arm_v7s] [i386] [x86_64] [arm64]
GoogleMobileAds (for architecture armv7):   current ar archive
GoogleMobileAds (for architecture armv7s):  current ar archive
GoogleMobileAds (for architecture i386):    current ar archive random library
GoogleMobileAds (for architecture x86_64):  current ar archive random library
GoogleMobileAds (for architecture arm64):   current ar archive

然而,file在动态框架上运行会得到不同的结果:

> file AppKit 
AppKit: Mach-O universal binary with 2 architectures: [i386: Mach-O dynamically linked shared library i386] [x86_64]
AppKit (for architecture i386): Mach-O dynamically linked shared library i386
AppKit (for architecture x86_64):   Mach-O 64-bit dynamically linked shared library x86_64

不幸的是,您描述的问题是App Store分发系统的已知限制.从理论上讲,分配动态框架的正确方法应该是在所有体系结构中分发全脂二进制文件,并让构建系统在构建时抛弃不需要的体系结构,或者让App Store分发系统在切片时执行此操作.特定设备的应用程序(" 切片 ").如果我不得不猜测,由于这些系统不支持从App Store切片,App Store发行版因为iOS 8及以下版本的支持而失败了.

谷歌创建静态库的原因是为了支持iOS 7.这个时代的一个愚蠢的原因,它为开发人员创造了许多问题,因为谷歌也坚持使用CocoaPods.静态框架,虽然表面看起来像一个银弹("没有用于lipo拱门的脚本;没有嵌入"),实际上并不那么好.例如,如果您想要包含非编译资源,静态框架将无法实现这一目标(动态框架是捆绑包,而静态框架则不是).

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有