Xcode11 iOS for MAC 遇到的問題

須要系統MacOS 10.15,Xcode11,OC代碼和Swift代碼項目都行。ios

MacOS 10.15以後,Xcode11 能夠將iOS app秒變Mac app,對iOS開發者又將是一波潮流,MacOS的生態更加繁榮。Mac OS和iOS 系統仍是有許多不一樣之處,有不一樣的框架庫,雖然蘋果官方作了兼容處理,但大部分的第三方庫,並還未作徹底兼容。可能存在問題大概就是調用了廢棄方法,調用了iOS獨有類未終端限制等。 iOS 設備上的強大的手勢操做,能夠經過Macbook的觸摸板部分實現。git

用個小項目試了下,iOS能夠運行for Mac。項目小隻用了AFNetWorking 和Masonry、MJExtension、DGActivityIndicatorView 庫,遇到問題和參照解決方法。github

一、AFNetWorking 庫調用了廢棄方法

最新的AFNetworking 3.2.1sql

- (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:macos

- (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 須要再修改過了。bash

二、UIWebView + AFNetworking 編譯不經過

MacOS上並不在使用UIWebView ,所以UIWebView + AFNetworking不能編譯經過, 若是您未使用UIWebView+AFNetworking,您能夠臨時刪除這個類和相關引用。app

三、 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
複製代碼

修改成ui

#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) 的判斷。spa

注意: 以上修改如有pod install 須要再次修改。

四、SocketRocket 庫在for Mac問題較多,我暫時不須要,就移除了這個庫,後續再補充方法。

五、界面效果對比圖

iOS app示例圖

MacOS  app示例圖

原文連接

相關文章
相關標籤/搜索