iOS工具篇 --- XCode

1. 历史版本

1.1 下载地址

下载地址:https://developer.apple.com/download/more/

2. Xcode 相关问题

2.1 问题:XCode 11 新创建工程低版本黑屏的问题

XCode 10创建工程:

XCode 11创建工程:

对比AppDelegate.h发现:缺少 UIWindow *window 的属性,所以我们直接在AppDelegate.h中按照以前的方法添加一个 UIWindow *window 的属性即可.

2.2 XCode打包

2.2.1 问题1:Xcode 11打包报错“IPA processing failed”

原因:项目里面 bitcode 设置为 NO,打包时Xcode 默认选中了Rebuild from Bitcode

解决办法:将 Rebuild from Bitcode 取消选中即可。

2.2.1 问题2:Xcode 12打包报错“IPA processing failed”

原因:某一个动态库打包的时候没有移除模拟器架构
解决方法:

//方法一:
1,、终端cd到framework所在的目录
2、查看SDK的二进制文件支持的CPU架构,如果只显示armv7 arm64,那么就没问题,如果有模拟器的架构x86_64, i386那就是有问题
lipo -info XXX.framework/XXX
3、移除支持x86_64,i386的二进制文件
lipo XXX.framework/XXX -remove x86_64 -remove i386 -output XXX
4、替换framwork内部二进制文件[记得备份]
mv XXX XXX.framework/XXX
5、查看剥离后的二进制文件支持的CPU架构,如果显示armv7 arm64,就完成剥离,可上传AppStore
lipo -info XXX.framework/XXX
//方法二:buildPhases->New Run Script Phase添加以下内容
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

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

EXTRACTED_ARCHS=()

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

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

echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

done

2.2.2 问题:XCode 11打包上传App Store一直卡在Authenticating with the itunes store

原因:

  1. Xcode更新到11之后,可以通过XCode直接上传,也可以用上传工具Transporter,但最后上传包是通过程序iTMSTransporter来完成的。
  2. 第一次上传包的时候会在硬盘目录:/用户/你的电脑登录账号名/资源库/Caches/com.apple.amp.itmstransporter/目录下下载一些缓存文件,这些缓存文件没有下载完,或者下载失败没下载完时,提交应用这个页面就会卡住或者这个页面很慢。

解决办法:

1. 直接下载`com.apple.amp.itmstransporter `文件覆盖原有文件,链接:https://pan.baidu.com/s/1V9btJT01cNhGubINP7Hjxg  密码:van7
2. 把解压后的`com.apple.amp.itmstransporter`目录放到`/用户/你的电脑登录账号名/资源库/Caches/`目录下,覆盖你原有的`com.apple.amp.itmstransporter`目录
3. 将新的`com.apple.amp.itmstransporter`目录下/obr/2.0.0/目录下的repository.xml文件中的所有`Simpsons`修改为你自己电脑的登录账号名,否则上传时会在错误的路径下找资源文件
4. 再次尝试上传

2.3 XCode 添加 pch 文件

1、File > New > File > iOS > Other > PCH File 创建pch文件
2、Tartet -> Build Settings -> 搜索 Prefix Header -> 将创建的pch文件路径写入

2.4 XCode 注释

Command + / 注释单行代码
Command + option + / 可以对属性和类以及方法进行注释
#pragma mark  <#注释的内容#>

2.5 其他报错

2.5.1 使用模拟器时Xcode控制打印 Sending selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099


解决方法:

  • 在终端输入如下命令:
    xcrun simctl spawn booted log config --mode "level:off"  --subsystem com.apple.CoreTelephony
    

2.5.2 XCode运行别人项目代码出现 No account for team "8PC4X7QUY9". Add a new account in the Accounts preference pane or verify that your accounts have valid credentials

解决方法:

1. 复制错误码:8PC4X7QUY9
2. 在 Target -> Building 搜索 `8PC4X7QUY9`,并将其去掉重新运行即可

2.5.3 XCode 出现dyld: Library not loaded: @rpath/XXX.framework的错误

解决办法:

1. Targets -> Build Phases 点击+ 选择`New Copy Files`
2. `Destination`选择+,把提示报错的framework添加在这里

2.5.4 fatal error: lipo: input file

问题:XCode添加 Run Script,开启Swift混编之后,出现以下报错:

fatal error: lipo: input file (/Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts) must be a fat file when the -extract option is specified

Merging extracted architectures: arm64
fatal error: lipo: can't open input file: /Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts-arm64 (No such file or directory)

rm: /Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts-arm64: No such file or directory

Replacing original executable with thinned version
mv: rename /Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts-merged to /Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts: No such file or directory

原因:framework框架不包含多个架构二进制文件,因此提取和合并失败
解决办法:编辑脚本尝试确定framework框架是否为FAT。如果是,则跳过它。

#!/usr/bin/env bash

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

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

    if [ ! -f "${FRAMEWORK_EXECUTABLE_PATH}" ]; then
        continue
    fi

    if xcrun lipo -info "${FRAMEWORK_EXECUTABLE_PATH}" | grep --silent "Non-fat"; then
        echo "Framework non-fat, skipping: $FRAMEWORK_EXECUTABLE_NAME"
        continue
    fi

    echo "Thinning framework $FRAMEWORK_EXECUTABLE_NAME"

    EXTRACTED_ARCHS=()

    for ARCH in $ARCHS
    do
        echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
        xcrun lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
        EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    done

    echo "Merging extracted architectures: ${ARCHS}"
    xcrun lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"

    echo "Replacing original executable with thinned version"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
本文作者:Rui
发布时间:2021-04-11, 21:26:36
原始链接:https://wrf8.github.io/posts/3904328560.html
版权声明:转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏