美文网首页
Xcode11 iOS for MAC 遇到的问题

Xcode11 iOS for MAC 遇到的问题

作者: 择势量投 | 来源:发表于2019-10-03 16:05 被阅读0次

    需要系统MacOS 10.15,Xcode11,OC代码和Swift代码项目都行。

    MacOS 10.15之后,Xcode11 可以将iOS app秒变Mac app,对iOS开发者又将是一波潮流,MacOS的生态更加繁荣。Mac OS和iOS 系统还是有许多不同之处,有不同的框架库,虽然苹果官方做了兼容处理,但大部分的第三方库,并还未做完全兼容。可能存在问题大概就是调用了废弃方法,调用了iOS独有类未终端限制等。
    iOS 设备上的强大的手势操作,可以通过Macbook的触摸板部分实现。

    用个小项目试了下,iOS可以运行for Mac。项目小只用了AFNetWorking 和Masonry、MJExtension、DGActivityIndicatorView 库,遇到问题和参照解决方法。

    1、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);
    

    也许您应该使用新的API:

    - (instancetype)initWithMemoryCapacity:(NSUInteger)memoryCapacity diskCapacity:(NSUInteger)diskCapacity directoryURL:(nullable NSURL *)directoryURL API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
    

    问题已提交到github,但AFNetworking还未更新,可以手动修改unlock保存。运行,若有pod install 需要再修改过了。

    2、UIWebView + AFNetworking 编译不通过

    MacOS上并不在使用UIWebView ,因此UIWebView + AFNetworking不能编译通过,
    如果您未使用UIWebView+AFNetworking,您可以临时删除这个类和相关引用。

    3、 WCDBOptimizedSQLCipher 存在gethostuuid() 问题

    WCDB 库是一个不错的sqlite管理库。但是在forMac编译时,可以将如下定义

    #if defined(__APPLE__) && ((__MAC_OS_X_VERSION_MIN_REQUIRED > 1050) || \
                               (__IPHONE_OS_VERSION_MIN_REQUIRED > 2000))
    #  if (!defined(TARGET_OS_EMBEDDED) || (TARGET_OS_EMBEDDED==0)) \
           && (!defined(TARGET_IPHONE_SIMULATOR) || (TARGET_IPHONE_SIMULATOR==0))
    #    define HAVE_GETHOSTUUID 1
    #  else
    #    warning "gethostuuid() is disabled."
    #  endif
    #endif
    

    修改为

    #if defined(__APPLE__) && ((__MAC_OS_X_VERSION_MIN_REQUIRED > 1050) || \
                               (__IPHONE_OS_VERSION_MIN_REQUIRED > 2000))
    #  if (!defined(TARGET_OS_EMBEDDED) || (TARGET_OS_EMBEDDED==0)) \
           && (!defined(TARGET_IPHONE_SIMULATOR) || (TARGET_IPHONE_SIMULATOR==0)) \
           && !defined(TARGET_OS_UIKITFORMAC)
    #    define HAVE_GETHOSTUUID 1
    #  else
    #    warning "gethostuuid() is disabled."
    #  endif
    #endif
    

    添加 !defined(TARGET_OS_UIKITFORMAC) 的判断。

    注意: 以上修改若有pod install 需要再次修改。

    4、 WCDB库使用过程中的一个坑

    image.png

    遇到一个相对隐蔽的问题是,在使用“模型类名.属性名”的 文件, 需要修改成.mm C++ 文件,并需要引用 #import "模型类名+WCTTableCoding.h" 分类,包含ORM 绑定声明,否则会提示未定义属性。

    5、SocketRocket 库在for Mac问题较多,我暂时不需要,就移除了这个库,后续再补充方法。

    6、界面效果对比图

    iOS app示例图 MacOS app示例图

    相关文章

      网友评论

          本文标题:Xcode11 iOS for MAC 遇到的问题

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