2015-02-21 49 views
24

Ich habe ein dynamisches Framework, das zwischen einer iOS-Anwendung und einer Erweiterung geteilt wird. In diesem Framework gibt es Code, der auf UIApplication verweist, der natürlich nicht in einer Erweiterung verwendet werden kann. Diese Anrufe sind komplett isoliert und ich bin nicht besorgt, dass sie Probleme mit meiner Nebenstelle verursachen.Wie "Warnung: Verknüpfung gegen Dylib nicht sicher für die Verwendung in Anwendungserweiterungen" zu unterdrücken?

Da in der Warnmeldung kein Flag angegeben ist, gibt es möglicherweise keine Möglichkeit dazu, aber wie kann ich unterdrückenwarning: linking against dylib not safe for use in application extensions beim Erstellen meines Projekts?

+6

Im Ziel für Ihre Erweiterung ein Build es in dem "Build-Optionen" Abschnitt Einstellung ist - "benötigen nur App-Erweiterung-Safe-API". Wenn es nicht bereits aktiviert ist, versuche es zu aktivieren ... – Toastor

+1

Ach ja, selbst wenn alles gut läuft, indem du die nicht erlaubte API in deiner Erweiterung nicht verwendest, besteht eine gute Chance, dass Apple deine Erweiterung ablehnt, um dagegen zu verlinken sowieso. Weitere Informationen finden Sie im Abschnitt "Umgang mit allgemeinen Szenarios" im Handbuch zur Programmierung von App-Erweiterungen. – Toastor

+7

@Toastor Die '' '' Nur App-Extension-Safe API''' Deaktivierung deaktivieren! – loretoparisi

Antwort

6

Kurze Antwort: Es gibt nicht wirklich einen Weg zu tun.

Was ich getan habe, war Refactoring mein Code, um die Teile, die meine Erweiterung auf und meine dynamische Rahmen gemeinsam waren, so dass meine Erweiterung sicher diese Stücke unabhängig von der Telefon-spezifischen Code verweisen konnte.

Ich habe das getan, weil irgendwann in der Zukunft muss ich dies in den App Store und Apples Richtlinien scheinen ziemlich klar, dass die Referenz UIApplication ist ein ziemlich großes No-No.

+0

Wo haben Sie den gemeinsamen Code? Wir haben es in einem Rahmen und verweisen Sie dies in der App und der Erweiterung. Aber das wirft die Warnung ... – blackjacx

17

Für Ihre Watch/today-widget Erweiterung Ziel (also nicht Ihre App oder libray Ziel), gehen Sie in die Projekteinstellungen und ändern Sie die Build-Einstellung "APPLICATION_EXTENSION_API_ONLY"/"Nur App-Extension-Safe API erfordern" auf NO.

+3

Dies würde nur die Warnung ausschalten Jede Verwendung von API, die nicht für Extension verfügbar ist, führt zu einer Ablehnung während App App Überprüfung.Wenn Sie diese App über App Store freigeben möchten, ist es am besten, die Warnung aktiviert zu lassen und die Verwendung von APIs, die nicht für Erweiterungen zulässig sind, zu entfernen. – skim

0

Ich denke, dass Sie Embedded Framework verwenden können, um Code zwischen Ihrer App-Erweiterung und ihrer App zu teilen. Sie müssen jedoch darauf achten, dass Ihr Framework keine APIs enthält, die für Erweiterungen nicht verfügbar sind. Siehe Some APIs Are Unavailable to App Extensions und Using an Embedded Framework to Share Code.

Wenn Ihr Framework enthält keine solche apis vergessen Sie nicht Require Only App-Extension-Safe API zu JA im Rahmen des Ziels Build Settings einzustellen.

enter image description here

Als zweite Möglichkeit, Quelldateien zwischen Anwendung und Erweiterung zu teilen, Sie müssen keine separaten Rahmen Ziel erstellen. Sie können Quelldateien nur freigeben, indem Sie auf beide Projekte abzielen.

enter image description here