美文网首页
[Catalyst]处理XCode11 将iOS App 打包成

[Catalyst]处理XCode11 将iOS App 打包成

作者: TEASON | 来源:发表于2019-12-26 16:58 被阅读0次
Catalina.jpg

今年发布的bugOS13的同时, 对苹果开发者们还有个好消息, 无论是Swift还是OC, 在XCode11下都可以打包为mac端应用了.
笔者也试着跑了下自己的程序, 前前后后红色警告起码有20多个, 整理了一遍, 如果有遗漏和错误希望大家指正.

1. 更新所有旧API

老旧组件例如UIWebView等, 在Mac上已经没有了, 这也包括第三方库中引用的, 需要统统替换掉. 如果你的项目是引用的CocoaPods的. 下次更新pod之后还需要再弄一次, 所以需要剥离开来(手动引用这些第三方库,如AF等).

  1. 所有用到UIWebView的, 全部切换成 WKWebView
  2. 所有用到ALAssetsLibrary的, 全部切换 PhotoKit

2. 未签名的库

需要给代码加上签名


1_.pic.jpg

3. AFNetworking

  1. 第一点中说的问题UIWebView+AFNetworking. 删~
  2. 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可以直接创建宏在代码中使用.

  1. 为项目加入新的scheme或着自定义宏. 代码中通过#ifdef, #ifndef宏, 进行适配
#ifdef xxxScheme
...    
#else
...
#endif
  1. Conditional import
#if canImport(Crashlytics)
func dLog() { 
    // use Crashlytics symbols 
}
#endif
  1. 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

相关文章

网友评论

      本文标题:[Catalyst]处理XCode11 将iOS App 打包成

      本文链接:https://www.haomeiwen.com/subject/tvhloctx.html