今年发布的bugOS13
的同时, 对苹果开发者们还有个好消息, 无论是Swift
还是OC
, 在XCode
11下都可以打包为mac端应用
了.
笔者也试着跑了下自己的程序, 前前后后红色警告
起码有20多个, 整理了一遍, 如果有遗漏和错误希望大家指正.
1. 更新所有旧API
老旧组件例如UIWebView
等, 在Mac上已经没有了, 这也包括第三方库中引用的, 需要统统替换掉. 如果你的项目是引用的CocoaPods
的. 下次更新pod
之后还需要再弄一次, 所以需要剥离开来(手动引用这些第三方库,如AF等).
- 所有用到
UIWebView
的, 全部切换成WKWebView
- 所有用到
ALAssetsLibrary
的, 全部切换PhotoKit
2. 未签名的库
需要给代码加上签名
3. AFNetworking
- 第一点中说的问题
UIWebView+AFNetworking
. 删~ -
AFNetworking
3.2.1中调用了废弃的方法
- (instancetype)initWithMemoryCapacity:(NSUInteger)memoryCapacity diskCapacity:(NSUInteger)diskCapacity diskPath:(nullable NSString *)path API_DEPRECATED_WITH_REPLACEMENT("initWithMemoryCapacity:diskCapacity:directoryURL:", macos(10.2,API_TO_BE_DEPRECATED), ios(2.0,API_TO_BE_DEPRECATED), watchos(2.0,API_TO_BE_DEPRECATED), tvos(9.0,API_TO_BE_DEPRECATED)) API_UNAVAILABLE(uikitformac);
=> API_UNAVAILABLE(uikitformac);
替换成
return [[NSURLCache alloc] initWithMemoryCapacity:20 * 1024 * 1024
diskCapacity:150 * 1024 * 1024
directoryURL:[NSURL URLWithString:@"com.alamofire.imagedownloader"]] ;
4. 静态库中包含模拟器的包
因为Mac
端没有iOS的模拟器
这几个问题解决之后. 那一抹亮眼的红色
终于消停了.
如果还有更多的适配希望大家能够补充.
最后. 写兼容代码
写兼容性代码就是条件语句咯, XCode
已经为我们开了路, 但还剩下许多细节需要实现.
首先你要为项目增加新的target
, 写入新的bundleID
等, 增加target
的细节可以参考这篇文章
在新的 target
下进入Building Settings
, 找到PreprocessorMacros
可以直接创建宏在代码中使用.
- 为项目加入新的
scheme
或着自定义宏
. 代码中通过#ifdef
,#ifndef
宏, 进行适配
#ifdef xxxScheme
...
#else
...
#endif
- Conditional
import
#if canImport(Crashlytics)
func dLog() {
// use Crashlytics symbols
}
#endif
CocoaPods
根据platform
适配, 项目需要增加一个target
专门对应mac端
,
target :testDemo do
platform:'ios','8.0'
pod 'AAA','~> 1.0'
end
target :testDemoMac do
platform:'osx','10.15'
pod 'BBB','~> 2.0'
end
题外话: 根据scheme
来, 因为有些组件做成模拟器和真机分开的形式
pod 'mySdk-release', :configurations => ['Release']
pod 'mySdk', :configurations => ['Debug']
最终的Podfile
文件是这个样子
def commonPods
pod 'a'
# ...
end
target 'testDemo' do
use_frameworks!
platform:'ios','8.0'
commonPods
pod 'b'
pod 'c'
# ...
end
target 'testDemoMac' do
use_frameworks!
platform:'osx','10.15'
commonPods
pod 'd'
pod 'e'
# ...
end
For More
module - Conditional Imports in Swift - Stack Overflow
https://guides.cocoapods.org/syntax/podfile.html
https://developer.apple.com/documentation/webkit/wkwebview
https://developer.apple.com/documentation/photokit
https://www.talentica.com/blogs/ios-build-management-using-custom-build-scheme/
https://guides.cocoapods.org/syntax/podfile.html#platform