美文网首页
[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