我不能再在模拟器上运行我的应用程序了。Online建议我编辑我的项目。Pbxproj,但这似乎不起作用。如何恢复在模拟器上运行项目的能力(并在设备上仍然能够这样做)?我正在开发另一个项目,该项目使用了许多相同的框架,但它运行在模拟器上。什么会导致类似的框架在一个项目中工作,而在另一个项目中不工作?
当前回答
这里的大多数答案都是为了让通用二进制文件的使用者绕过新的限制。但是,正如在其他地方提到的,现在是时候为框架作者迁移到Apple的XCFramework格式了。
如果您在使用聚合目标和lipo之前运行一个自定义构建脚本来创建通用二进制文件,那么可以直接迁移到生成.xcframework文件
首先,在构建设置中确保“build Libraries for Distribution”(BUILD_LIBRARY_FOR_DISTRIBUTION)设置为YES
然后,将使用lipo的现有聚合目标构建脚本替换为如下内容,这可以简单地展示如何制作“发布”框架:
# Universal Script
set -e
FRAMEWORK_NAME="your_framework_name"
IOS_SCHEME_NAME="your_scheme_name"
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi
SIMULATOR_ARCHIVE_PATH="${SRCROOT}/build/${FRAMEWORK_NAME}-iphonesimulator.xcarchive"
DEVICE_ARCHIVE_PATH="${SRCROOT}/build/${FRAMEWORK_NAME}-iphoneos.xcarchive"
OUTPUT_DIR="${SRCROOT}/framework_out_universal/"
# Simulator xcarchieve
xcodebuild archive \
-scheme ${IOS_SCHEME_NAME} \
-archivePath ${SIMULATOR_ARCHIVE_PATH} \
-configuration Release \
-sdk iphonesimulator \
SKIP_INSTALL=NO
# Device xcarchieve
xcodebuild archive \
-scheme ${IOS_SCHEME_NAME} \
-archivePath ${DEVICE_ARCHIVE_PATH} \
-sdk iphoneos \
-configuration Release \
SKIP_INSTALL=NO
# Clean up old output directory
rm -rf "${OUTPUT_DIR}"
# Create xcframwork combine of all frameworks
xcodebuild -create-xcframework \
-framework ${SIMULATOR_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
-framework ${DEVICE_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
-output ${OUTPUT_DIR}/${FRAMEWORK_NAME}.xcframework
# Delete the most recent build.
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi
你可以调整上面有不同的输出dirs,不同的删除行为,支持多种配置(发布vs调试),但这对我来说是可行的。
最后,作为一次性步骤,删除导致您在本项目中提到的错误的your_framework_name.framework通用二进制文件。复制新构建的your_framework_name。Xcframework并将其添加到项目中,错误就会消失。
其他回答
我想你所链接的框架只是为arm架构而构建的。你不能在模拟器中运行它。您将需要框架的作者来构建一个“通用框架”。
使用.xcframework,而不是包含iOS和iOS模拟器切片的“胖”.framework。 这也避免了在为App Store构建时使用构建阶段剥离iOS模拟器切片的需要。
“Fat”框架通常是使用lipo创建的,因为它们不能直接由Xcode构建,因此不受支持(来源:开发者技术支持苹果开发者论坛). xcframework是唯一受支持的机制,可以发布一个支持iOS和iOS模拟器的单一框架。
此外,.xframework是唯一支持发布二进制Swift框架的方式(来源:苹果开发者论坛上的开发者技术支持)。
在Xcode 12.3中,不支持“胖”框架的事实是强制的,因为Xcode在构建过程中验证了框架,这就是为什么很多项目突然开始看到构建错误。
老实说,你们应该遵循的唯一方法是将.framework转换为.xcframework,因为这是苹果从XCode版本12.3及以上强制执行的。验证工作空间和其他快速修复可能是暂时的,并在未来引起问题——比如为appstore发布或测试飞行存档应用程序。
要将.framework转换为.xcframework,请遵循本文中描述的步骤,从段落命令开始: https://medium.com/strava-engineering/convert-a-universal-fat-framework-to-an-xcframework-39e33b7bd861
我在Xcode v12.3和Universal(fat) Framework(.framework)上运行了这个错误
Building for iOS Simulator, but the linked and embedded framework was built for iOS + iOS Simulator.
解决方案1:是Toggle/Toggle验证工作区(不是默认)
方案二:使用XCFramework[About]
如果你是Xcode的新手,使用Xcode只是为了启动模拟器来运行appium工具,以上步骤可能会比较复杂。对于初学者来说,使用小于11的xcode版本即可。
此链接有助于下载xcode 10.3
Xcode10.3
如果你尝试从AppStore下载,我们需要有高达40gb的空闲存储空间,上述' xip文件将不会导致存储错误。
你可以稍后感谢我,如果这工作!!
推荐文章
- Xcode 4 -在新的Macintosh安装上的配置文件上“没有找到有效的签名标识”错误
- Xcode +删除所有断点
- 在iPhone上确定用户是否启用了推送通知
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?
- Swift:理解// MARK
- 错误ITMS-9000:“冗余二进制文件上传。火车1.0版本已经有一个二进制版本上传。
- Swift -转换为绝对值
- 从父iOS访问容器视图控制器
- 自定义dealloc和ARC (Objective-C)
- 调整UITableView的大小以适应内容
- 在代码中为UIButton设置一个图像
- NSRange从Swift Range?
- UICollectionView中的单元格间距
- 我如何在我的iOS应用程序中每n分钟得到一个后台位置更新?
- 你常用的Xcode快捷键有哪些?