我不能再在模拟器上运行我的应用程序了。Online建议我编辑我的项目。Pbxproj,但这似乎不起作用。如何恢复在模拟器上运行项目的能力(并在设备上仍然能够这样做)?我正在开发另一个项目,该项目使用了许多相同的框架,但它运行在模拟器上。什么会导致类似的框架在一个项目中工作,而在另一个项目中不工作?
当前回答
Xcode 12.3
在我的案例中,我通过在Build Settings选项卡中简单地将Validate Workspace设置为Yes来解决这个问题
其他回答
我想你所链接的框架只是为arm架构而构建的。你不能在模拟器中运行它。您将需要框架的作者来构建一个“通用框架”。
这里的大多数答案都是为了让通用二进制文件的使用者绕过新的限制。但是,正如在其他地方提到的,现在是时候为框架作者迁移到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并将其添加到项目中,错误就会消失。
我在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]
No doubt that the fix in case of Xcode 12.3 is to setup the Validate Workspace property in the target's build setting. However if you check the diff after this change, the reason of the build error is the missing parameter (VALIDATE_WORKSPACE) from the project file, not the value of the parameter. So you don't need the value to be YES. You need to add the value to the project settings and you can leave it on the default value (NO). At the first time, it shows up in the Build Settings with NO, but only because that is the default value of the missing parameter.
TLDR; 在不更改项目设置的情况下,转到目标的构建设置,找到“验证工作区”,将其设置为YES,然后设置回NO。
如果你是Xcode的新手,使用Xcode只是为了启动模拟器来运行appium工具,以上步骤可能会比较复杂。对于初学者来说,使用小于11的xcode版本即可。
此链接有助于下载xcode 10.3
Xcode10.3
如果你尝试从AppStore下载,我们需要有高达40gb的空闲存储空间,上述' xip文件将不会导致存储错误。
你可以稍后感谢我,如果这工作!!
推荐文章
- 如果模态ViewController演示样式为UIModalPresentationFormSheet, iPad键盘将不会解散
- 在UITableView中检测哪个UIButton被按下了
- 为iOS模拟器构建,但链接框架'****.framework'是为iOS构建的
- iOS更新后保留旧的启动屏幕和应用程序图标
- 如何象征崩溃日志Xcode?
- 我如何得到一个plist作为一个字典在Swift?
- Xcode - ld:没有为- lpods找到库
- 自动调整掩码大小编程vs接口生成器/ xib / nib
- 我如何输入RGB值到接口生成器?
- NSUserDefaults -如何判断一个键是否存在
- Xcode UI测试用例中的延迟/等待
- 裁剪一个UIImage
- 在Xcode单元测试中使用@可测试时“没有这样的模块”
- 这个应用程序是否使用广告标识符(IDFA)?—AdMob 6.8.0
- iOS 7: UITableView显示在状态栏下