2017-02-21 116 views
4

我有從一個應用程序擴展

  • 一個應用目標項目鏈接到嵌入式框架:MyApp
  • 一個嵌入式框架目標:MyKit.framework
  • 一個應用程序擴展目標:MyExtension

Here is a sample project.

我想使用的MyKit共享代碼的MyExtension但是當我聯繫,我得到警告

ld: warning: linking against a dylib which is not safe for use in application extensions: /Users/me/Library/Developer/Xcode/DerivedData/MyApp-dnztzmxjghjlsteetlokzhjtjqkm/Build/Products/Debug-iphonesimulator/MyKit.framework/MyKit 

Apple's documentation says

要配置一個應用程序擴展目標使用嵌入式框架,設置目標的「僅需要應用程序擴展安全API」構建設置爲是。如果你不這樣做,Xcode會提醒你這樣做,通過顯示警告「鏈接到dylib不安全以用於應用程序擴展」。

默認情況下設置正確。我通過將「僅需要應用程序擴展安全API」設置爲NO,可以通過擺脫警告,但這可能會導致一些應用程序拒絕。

該框架在應用程序擴展中不使用任何API not allowed。事實上,在示例項目中,您會看到MyKit.framework只會將消息記錄到控制檯。

從應用程序擴展中鏈接到嵌入式框架以避免這種情況的正確方法是什麼?

回答

4

如果您的目標是在App和Extension之間共享代碼,則不需要創建Framework。您可以將源文件添加到不同的目標:

要使用框架,設置「只需要應用程序,擴展安全的API」的框架目標構建設置YES。這樣做後,您的示例項目中沒有警告。


意見基於另外:如您不想在項目之間共享代碼,使用框架沒有意義的,我在這裏。如果您想在項目之間共享代碼並決定使用框架,我建議在自己的版本控制下將其作爲獨立的Xcode項目。

+0

Ahh我必須在框架*中設置「僅需要應用程序擴展安全API」*而不是在擴展中!順便說一句,我不得不使用其他應用程序之間實際共享的框架。我上面的場景只是爲了簡化問題 – Jan

+0

是的。該錯誤告訴您,您正在使用可能使用不受支持的API調用的框架。如果您嘗試在您的框架中使用不受支持的API(例如'UIApplication'),編譯器會給您一個錯誤,從而向客戶端保證它是保存到的,所以使用''只需要App-擴展 - 安全API'= YES'在擴展中使用框架。 – shallowThought

+0

好吧。謝謝! – Jan