IOS 错误集锦

开发中遇到很多小错误大错误, 很多时候下次遇到可能已经忘记,这里做一个记录,
注:很多是个人的理解不一定是正确答案

1 上传包ERROR ITMS-90206

1
2
3
4
5
ERROR ITMS-90206: "Invalid Bundle. The bundle at 'xxx WatchKit Extension.appex' contains disallowed file 'Frameworks'." I have tried all the ...
这个发现是扩展加载了一些不该加载的,
xcode8 把报错的扩展 build settings 搜索"Always Embed Swift Standard Libraries"
设置成NO
OK 了 上传包不报错了

2 上传包error -22421

原因 苹果服务器抽风多次尝试ok

3 上传包 -4238

原因 自己抽风忘记更改版本号码有重复的


This application’s application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed

原因:这个项目App已经存在这个真机上了,这个App是旧的identifier运行的。
真机手动删除也ok

解决方法:Xcode —>Window —> Devices —> 自己的真机 —> installed Apps —-> 删除这个App —-> 重新运行


Cannot Synthesize Weak Property Because The Current Deployment Target Does Not Support Weak References

在用 pod 升级依赖(Installing StreamingKit 0.1.30 (was 0.1.29)) 项目后报错:

原因 :
https://github.com/tumtumtum/StreamingKit/blob/master/StreamingKit.podspec
最低支持ios4.3 不支持weak

解决方案:
在 Podfile 下面添加如下代码:

1
2
3
4
5
6
7
8
9
10
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if target.name == 'StreamingKit'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '7.0'
end
end
end
end

From: https://zhuanlan.zhihu.com/p/35251092

升级到 Swift 4.1 的两个 Crash

前两天升级了 Xcode 9.3, 也就升级到 Swift 4.1。使用它来编译一些例子工程,源码基本不用修改,只是报了警告,几个地方需要将 flatMap 名字修改成 compactMap。见提案SE-0187

但工程运行起来,出现两个 Crash,记录一下。

1.

Crash 在如下地方,详细情况参见 [Swift/SR-7240]

swiftgetObjectType
UIApplicationDelegate.application(
:open:sourceApplication:annotation:)

原因是

func application(_ application: UIApplication, 
                      open url: URL, 
             sourceApplication: String?, 
                    annotation: Any) -> Bool

已经在 iOS 9.0 中废弃了。需要将其修改为

public func application(_ app: UIApplication, 
                     open url: URL, 
                      options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool

2.

例子工程使用了一个 HandyJSON 的库,升级到 Swift 4.1 后 Crash 了。

HandyJSON 应该是裁剪使用了一些 Reflection 代码。标准的 Swift Api 还没有完整反射功能的,HandyJSON 的某些接口实际上利用了 Swift 对象,没有公开的内存布局进行赋值,这种做法是一种 Hack 手段,比较危险。

Crash 在

var numberOfFields: Int {
    return Int(pointer.pointee.numberOfFields)
}

修正方法见, Xcode9.3 Swift4.1 crash 解决方案 #239

苹果每次升级,并不追求完全的兼容。升级后,原来的 App 总会有些小问题,强迫着开发者跟进修改。AppStore 很多两三年没有更新的 App, 实际上已经不能运行了。而微软就很讲究兼容性,Win95 上编译好的软件,在 Windows 7 也照样可以跑起来。

打破兼容性,抛弃历史包袱,的确可以使得生态更好。但打破兼容,假若开发者不快速跟进,整个生态早就崩掉了。苹果命好,如此任性。


【iOS 开发】解决使用 CocoaPods 执行 pod install 时出现 - Use the $(inherited) flag … 警告
pod 升级1.5.0 后出了不少警告

1
2
3
4
5
[!] The `boosjdance [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-boosjdance/Pods-boosjdance.debug.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
[!] The `boosjdance [Release]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-boosjdance/Pods-boosjdance.release.xcconfig'. This can lead to problems with the CocoaPods installation

解决方法
打开项目 Target - Build Settings ,搜索 Other Linker Flags ,在这个设置上加入 $(inherited) 。

打开项目 Target - Build Settings,依次搜索如下图所示的警告上提示的设置名称,将这些设置选项全部改为 $(inherited) ,或者选中这些设置按下 delete 键恢复原设置。

如果有 FRAMEWORK_SEARCH_PATHS 这个设置的警告的话,最好先把当前的设置项记录下来,然后选中设置按下 delete 以后,再把之前的设置加进去,否则编译可能会出现很多报错。

然后重新执行 pod install 或者 pod update 就会发现警告消失了。

如果我的方法不能够解决你的问题的话,可以试一下网上的另一种方法,就是点击项目文件 project.xcodeproj ,右键显示包内容,用文本编辑器打开 project.pbxproj ,command + F 搜索 OTHER_LDFLAGS ,删除搜索到的设置,command + S 保存,然后重新执行 pod install 或者 pod update 。


更新xcode9.3 出现Block implicitly retains ‘self’;explicitly mention ‘self’ to in dicate this… 警告,

解决 Building Setting -> 搜索
implicit retain of ‘self’
将对应的值改为NO


xcode报错, 系统迁移后, 运行错误,提示权限问题

Permission denied Command PhaseScriptExecution failed with a nonzero exit code

错误提示没有权限,
chmod a+x .sh文件权限 (注意拷贝过来的地址可能需要转译)


Author

陈昭

Posted on

2016-12-02

Updated on

2021-12-27

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Kommentare

You forgot to set the shortname for Disqus. Please set it in _config.yml.