- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
beginning June 1, 2015 app updates submit-6ren">
借助 Xcode 6,我们能够创建自己的动态 Cocoa Frameworks
。
因为:
模拟器仍然使用32位
库
beginning June 1, 2015 app updates submitted to the App Store must include 64-bit support and be built with the iOS 8 SDK (developer.apple.com)
我们必须制作胖库才能在设备和模拟器上运行项目。即在框架中支持 32 位和 64 位。
但我没有找到任何手册,如何导出通用胖框架以便将来与其他项目集成(并与某人共享此库)。
在Build Settings
中设置ONLY_ACTIVE_ARCH=NO
将支持 armv7 armv7s arm64 i386 x86_64
添加到 Architectures
(肯定)
但最后我仍然无法同时在设备和模拟器上使用此框架运行项目。
如果我从 Debug-iphoneos
文件夹中获取框架 - 它可以在设备上运行并在模拟器上出现错误:ld: symbol(s) not found for architecture i386
xcrun lipo -info CoreActionSheetPicker
Architectures in the fat file: CoreActionSheetPicker are: armv7 armv7s arm64
如果我从 Debug-iphonesimulator
文件夹中获取框架 - 它可以在模拟器上运行。我在设备上有错误:ld: symbol(s) not found for architecture arm64
xcrun lipo -info CoreActionSheetPicker
Architectures in the fat file: CoreActionSheetPicker are: i386 x86_64
此答案与 Xcode 6 iOS Creating a Cocoa Touch Framework - Architectures issues 有关但它不是重复的。
我发现了这个案例的“肮脏黑客”。看我的answer below .如果有人知道更方便的方法 - 请告诉我!
最佳答案
这个答案的实际情况是:2015 年 7 月。情况很可能会发生变化。
TLDR;
目前 Xcode 没有自动导出通用 fat 框架的工具,所以开发者必须求助于手动使用 lipo
工具。也根据this radar在提交给作为框架消费者的 AppStore 开发人员之前,还必须使用 lipo
从框架中剥离模拟器切片。
下面是更长的答案
我对该主题进行了类似的研究(答案底部的链接)。
我没有找到任何关于分发的官方文档,所以我的研究基于对 Apple Developer Forums、Carthage 和 Realm 项目的探索以及我自己对 xcodebuild
、lipo
,代码设计
工具。
这是来自 Apple 开发者论坛主题的长引用(带有我的一些标记)Exporting app with embedded framework :
What is the proper way to export a framework from a framework project?
Currently the only way is exactly what you have done:
- Build the target for both simulator and iOS device.
Navigate to Xcode's DerivedData folder for that project and lipo the two binaries together into one single framework. However, when you build the framework target in Xcode, make sure to adjust the target setting 'Build Active Architecture Only' to 'NO'. This will allow Xcode to build the target for multiple binarty types (arm64, armv7, etc). This would be why it works from Xcode but not as a standalone binary.
Also you'll want to make sure the scheme is set to a Release build and build the framework target against release. If you are still getting a library not loaded error, check the code slices in the framework.
- Use
lipo -info MyFramworkBinary
and examine the result.
lipo -info MyFrameworkBinary
Result is
i386 x86_64 armv7 arm64
- Modern universal frameworks will include 4 slices, but could include more:
i386 x86_64 armv7 arm64
If you don't see at least this 4 it coud be because of the Build Active Architecture setting.
这描述的过程与@skywinder 在他的回答中所做的几乎相同。
这就是Carthage uses lipo和 Realm uses lipo .
重要细节
有雷达:Xcode 6.1.1 & 6.2: iOS frameworks containing simulator slices can't be submitted to the App Store并在 Realm#1163 上围绕它进行了长时间的讨论和 Carthage#188以特殊的解决方法结束:
在提交到 AppStore 之前,必须从模拟器切片中剥离 iOS 框架二进制文件
迦太基有特殊代码:CopyFrameworks以及相应的文档:
This script works around an App Store submission bug triggered by universal binaries.
Realm 有特殊的脚本:strip-frameworks.sh以及相应的文档:
This step is required to work around an App Store submission bug when archiving universal binaries.
还有好文章:Stripping Unwanted Architectures From Dynamic Libraries In Xcode .
我自己使用了 Realm 的 strip-frameworks.sh
,它无需任何修改就可以完美地工作,当然任何人都可以自由地从头开始编写一个。
我推荐阅读我的主题的链接,因为它包含此问题的另一个方面:代码签名 - Creating iOS/OSX Frameworks: is it necessary to codesign them before distributing to other developers?
关于ios - 如何导出 "fat"Cocoa Touch Framework(用于模拟器和设备)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634466/
我使用 iOS 4.2 和 Xcode 3.2.5 创建了一个通用二进制文件。我正在尝试对应用程序进行一些自动化测试,由于 iPad 和 iPhone 版本之间的界面略有不同,因此我有单独的 UIAu
这是一个概念性的问题。如果有人能澄清背后的故事,那就太好了。 我了解模拟器和模拟器之间的区别。 模拟器:模仿设备环境(硬件、网络功能等)。与设备相比,我们更有可能得到非常接近的结果。 模拟器:使用正在
是否有任何现成的解决方案可以模拟或模拟 LDAP 服务器功能? 或者是否可以在 ubuntu 上安装 ldap 服务器(仅适用于 localhost)? 如果它不是来自 localhost 的 jsu
我正在将我的应用程序修复为通用二进制文件。模拟器上的测试似乎默认使用 iPad。对于诸如检查方向和小型 UI 更新之类的小修正,我能找到的获取 iPhone 版本的唯一方法是插入我的 iPhone 并
Emulator: emulator: WARNING: Could not connect to proxy at ::1:8080: Unknown error ! - Android 将 And
我的应用程序在 ios 4.3 模拟器中运行良好,但在 ios 5 模拟器中运行不佳。我的 iPhone 上有 ios 5,我的应用程序确实可以在 iPhone 上运行。 该应用在所有这三种环境中都可
我在 azure 上制作了移动应用程序,并将其快速启动为 xamarian.forms,并且(在未能发布下载的表 api 应用程序并决定在浏览器中编辑它之后)下载了他们提供的客户端应用程序。然后,当我
Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration! Emulator: Process
我试图在 iOS 10.3 模拟器上将任意文件从我的应用程序的沙箱保存到 iCloud Drive。 iCloud Drive 已启用并且我已登录。如果我在模拟器上打开 iCloud Drive 应用
有谁知道一个小型、快速、支持 DOM 层的 javascript 模拟器?在 C/C++ 中? 问题:我需要在爬虫应用程序中对 javascript 的基本支持,并且想知道除了以下选项之外是否还有其他
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我是 Xcode 开发新手。我在基于 Lion 的 Mac 上安装了 Xcode 4.3.1,并取消设置 ~/Library 上的隐藏标志。 我在这里读到了有关 iPhone/iPad 模拟器的信息
我已在 VisualStudio 2015 AZURE SDK 2.9、C# 中创建辅助角色 我在每个方法的开头添加了断点: public override void Run() {
全部。我已经安装了 Azure SDK 1.7。解决方案中的所有程序集都是使用“任何 CPU”设置进行编译的。但是当我在我的计算机上的 Azure 模拟器中启动解决方案时,其中之一失败了。该错误非常奇
有没有独立的 WAP 模拟器来模拟诺基亚 6600 和索尼爱立信 MIDP 手机的 waop 网站? 我正在创建一个 WAP 门户,我不想每次都将所有文件上传到网络上,然后将其加载到 Opera Mi
我已经安装了 Tizen 的 Visual Studio Code 扩展,并且(看起来)进展顺利。 但是,当我启动 Tizen 模拟器管理器时,我没有安装任何平台,并且当我尝试安装平台时,没有可用的平
我目前正在我的 jquery mobile/phonegap 应用程序中处理表单。在此表单中,我有两个选择列表。它们在我的桌面浏览器(firefox、safari、chrome)中都能正常工作。 奇怪
我尝试制作一个分辨率为 480x480 像素的模拟器。但是模拟器永远不会完成启动。它卡在 Android Logo 页面上。分辨率有限制吗? 最佳答案 模拟器 is not smart about s
我不知道如何在虚拟设备上启用快照功能。该选项是灰色的,创建或编辑虚拟设备时没有设置。我使用的是最新版本的 SDK 工具修订版 22.6.3 这是我的窗口的样子:Create new Android V
我正在尝试使用具有特定屏幕分辨率的模拟器,但是当我将屏幕参数设置为我需要的参数时,键盘消失了。这样我就没有后退按钮,主页按钮..任何想法如何解决这个问题?这是我在 AVD 管理器中设置的:屏幕分辨率:
我是一名优秀的程序员,十分优秀!