iOS经验类笔记积累
# 17.iOS经验类笔记积累
- 01.iOS真机模拟调试
- 02.iOS打包ipa应用
- 2.1 iOS发布方式
- 2.2 AdHoc方式打包
- 2.3 AppStore打包
- 03.首次安装打开白屏
- 04.混编桥接类配置
- 05.Web加载跨域问题
- 06.遇到沙盒权限保护
- 07.iOS断点调试应用
- 7.1 断点调试技巧
- 7.2 自定义设置
- 7.3 断点类型说明
# 01.iOS真机模拟调试
- 第一步:连接设备,将你的iOS 17设备通过USB线缆连接到电脑上。确保你的设备已经解锁,并授权信任你的电脑。
- 第二步:选择目标设备,打开Xcode,并在顶部工具栏中选择你的iOS设备作为目标设备。如果你的设备未在列表中显示,请检查USB连接,并确保设备已正确连接。
- 第三步:配置项目设置,选择你的项目并进入"Build Settings"选项卡。在"Base SDK"中选择最新的iOS版本,以确保项目能够与该系统版本兼容。
iOS12-Xcode10-App真机调试以及一些坑:https://juejin.cn/post/6844903832602804232
# 02.iOS打包ipa应用
- iOS开发- 打包ipa,让别人设备安装你的App:https://zhuanlan.zhihu.com/p/575601001
- 最新版iOS Xcode如何证书配置和ipa打包:https://juejin.cn/post/7222475192932892728
- IOS使用批处理打包:https://www.cnblogs.com/rslai/p/9291172.html
- ios快速打包的方法:https://www.applebyme.ltd/info/ios-kuai-su-da-bao-de-fang-fa-168992.html
- 详解iOS打包、发布与证书体系:https://juejin.cn/post/6989856745375924237
- iOS 的 Code Signing 体系:https://juejin.cn/post/6844903902605737997
打包过程
- 选择发布方式。目前使用 Ad Hoc 方式
- 选择证书和描述文件。目前使用炳亿的苹果账号
- 编译 & 签名。直接通过 Archive 编译出包
- 导出ipa文件。打出ipa文件后上传到公司的keystore (opens new window)
AdHoc与App Store打包
- AdHoc打包:允许开发者将应用分发给特定的设备。使用AdHoc打包的应用只能在开发者注册的设备上安装和运行。适合于内部测试或小规模分发。
- App Store打包:此打包方法是为了将应用发布到App Store,可以让所有用户下载和安装。应用需要经过苹果的审核流程。
如何使用TestFlight做iOS的灰度
- 首先要打个ipa包,然后上传到TestFlight平台后,做灰度测试
- Test Flight审核没有正式审核严格,所以一般1-2天就可以通过,但是前提条件是我们没有严重的BUG。
# 2.1 iOS发布方式
App Store Connect -上架App Store以及TestFlight的app,用于生产环境发布 Ad Hoc - 部分机器可安装的app,用于非生产环境的测试 Enterprise - 企业级应用发布 Development - 与Ad Hoc类似,只有后续步骤所需要的证书和描述文件不同
# 2.2 AdHoc方式打包
Ad Hoc 分发是一种方式,允许开发者将应用程序分发给受限的用户群体,例如测试人员、内部员工或特定客户,而不需要通过 App Store 进行发布。Ad Hoc 分发通常用于测试、内部部署或限制性分发的情况。
限制设备数量:每个 Ad Hoc 分发的应用程序都有一个设备数量限制,通常是 100 台设备。
1.打包(AdHoc方式)——>2.keyStore签名体验——>3.发布蒲公英扫码安装
1.1 配置证书(在Signing & Capabilities),选择All,然后安装证书后,在iOS(在Provisioning Profile)找到所安装证书。
1.2 在菜单栏中选择"Product",然后选择"Archive"。这会将项目编译并生成一个归档文件。
1.3 配置plist文件。把这个文件放到工程根目录下,然后编辑修改method,teamID,还有provisioningProfiles等属性
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
<plist version="1.0">
<dict>
<key>provisioningProfiles</key>
<dict>
<key>com.johannli.WecardSDKDemo</key>
<string>marx_dist2026</string>
</dict>
<key>method</key>
<string>ad-hoc</string>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<true/>
<key>teamID</key>
<string>CRY5MTFJN7</string>
<key>signingCertificate</key>
<string>Apple Distribution</string>
</dict>
</plist>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1.4 制作脚本,脚本如下所示。核心命令是:xcodebuild -exportArchive
#!/bin/bash
RELEASE_DIR=release
rm -rf $RELEASE_DIR
mkdir -p $RELEASE_DIR
#xcodebuild archive \
# -project AirPalmSdk.xcodeproj \
# -scheme AirPalmSdk \
# ARCHS="arm64" \
# -destination 'generic/platform=iOS' \
# -configuration Release \
# -archivePath ./build/archive.xcarchive
xcodebuild -exportArchive \
-archivePath /Users/yangchong/Library/Developer/Xcode/Archives/2025-03-06/AirPalmSdk.xcarchive \
-exportPath ${RELEASE_DIR} \
-exportOptionsPlist ./ad-hoc.plist \
-allowProvisioningUpdates
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1.5 然后编译脚本,修改1.2步骤输出的归档文件路径。然后在cmd中执行脚本即可,如下所示,打包成功!
CHONGYYANG-MB1:AirPalmSdk yangchong$ bash release.sh
2025-03-06 12:04:18.357 xcodebuild[25931:56545555] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path "/var/folders/f1/12b2l4wx1cb_js9wm1zy_8z00000gn/T/AirPalmSdk_2025-03-06_12-04-18.356.xcdistributionlogs".
2025-03-06 12:04:18.465 xcodebuild[25931:56545555] [MT] IDEDistribution: Command line name "ad-hoc" is deprecated. Use "release-testing" instead.
Exported AirPalmSdk to: /Users/yc/ugit/WxiOSPalmDa/ObjectiveC/AirPalmSdk/release
** EXPORT SUCCEEDED **
2
3
4
5
2.1 上传ipa,到keyStore签名平台。然后到企业签名中,点击内部体验,上传1.5步骤中打好的安装包,进行签名。最后会生成一个下载文件(带有sign)
3.1 将带有签名的ipa上传到蒲公英上,会生成一个安装二维码。扫码安装即可完成app的体验!
# 03.首次安装打开白屏
问题表现:最近新APP的开发反馈来一些问题,主要表现在首次安装该APP,首次启动,页面白屏没有数据。后台杀死重新打开,就好了!
iOS系统问题:iOS10之后,APP首次安装会有询问【是否允许“xxxAPP”使用数据?】询问网络权限弹窗,导致在用户允许之前,APP发出去的请求都是失败的。
猜测:因此很容易猜测出这样的结论:用户点“允许”之前,网络请求全都是失败的;而点“允许”之后,网络请求就能正常进行了。
解决方案如下所示:
- 首次安装增加开机屏引导:APP判断用户是否为首次,如果是,则推迟网络请求时机到用户滑动完引导界面。一般在用户滑动的过程中系统应该会询问网络权限。
- 首页无网络case的状况处理:出现数据空白时,如果在空白页面上有“重新加载”的按钮,也可以让用户体验好一些。用户点击重新连接会重新发起请求!
- 延迟请求:对于首次启动的所有接口,如果能延迟到用户点击“允许”之后再请求就可以,但致命缺点是不知道延迟多长时间。
- 稍后重新请求:网络框架如果做了请求失败时,定时重新请求的处理,应该也能解决首次请求失败的问题。这个比较麻烦!
- 监听网络状态:可以监听网络可达性检测的过程,类似Android中网络状态监听广播。当收到网络已连接可用,重新加载页面或者接口!
注意事项:如果用户点了不允许,那这个问题无解,必须用户去设置里面开启。
最快捷最后选择方案5,因为这个实现起来稍微简单,省时省力!如果后期该App对外发布则考虑2和5结合!
# 04.混编桥接类配置
【iOS开发】Swift、OC 混编用到的 Bridging-Header.h
https://cloud.tencent.cn/developer/article/1412686
iOS开发:在Swift中调用oc库 https://www.cnblogs.com/tonge/p/4974686.html iOS开发之-- oc 和 swift混编之自建桥接文件:https://www.cnblogs.com/hero11223/p/6337398.html Swift版本的Framework中,使用OC桥接报错:https://blog.csdn.net/weixin_33928467/article/details/91681955 用swift开发framework时采用OC混编的解决方案: https://www.cnblogs.com/zbblog/p/16228840.html
遇到问题:'WXApiObject.h' file not found with
解决办法:https://blog.csdn.net/wyz670083956/article/details/109360816
# 05.Web加载跨域问题
IOS 跨域问题分析和处理:https://blog.csdn.net/yangwubolwg/article/details/125215476
# 06.遇到沙盒权限保护
iOS swift Could not create a sandbox extension for '/' 该怎么解决
错误原因:iOS 的沙盒机制限制了应用程序对文件系统的访问。WKWebView 需要明确的权限来访问文件或目录。如果 allowingReadAccessTo 参数设置为根目录 / 或一个不包含目标文件的目录,就会触发此错误。
# 07.iOS断点调试应用
# 7.1 断点调试技巧
设置断点,在你想要调试的代码处点击设置就行了。通过快捷键"Command+"也可以。
断点的自定义设置,在设置断点的地方,右击该断点,会弹出一个栏,选择Edit Breakpoint,可以对断点进行自定义设置。具体可以看:https://blog.csdn.net/sunhuaqiang1/article/details/138151904