2017-01-15 7 views
13

Chciałbym stworzyć dynamiczną strukturę i rozprowadzić ją. Musi działać, gdy działa na symulatorze, urządzeniu iPhone i może być przesyłany do App Store.Jak utworzyć dynamiczną strukturę bez używania skryptu do rozcięcia plasterków symulatora?

Jestem świadomy lipo dzięki temu guide. Pokazuje, w jaki sposób możemy łączyć architektury symulatorów z architekturami iphone w jedną dynamiczną strukturę, która może być dystrybuowana bez dystrybucji kodu źródłowego. To pozwala mi korzystać z platformy zarówno dla symulatora, jak i urządzenia iPhone'a. Jednak nie powiedzie się, gdy próbuję wysłać go do App Store because of the simulator build.

Kartagina stanowi interesujące rozwiązanie. Tworzy strukturę, która działa zarówno na symulator, jak i iPhone'a. Ale kiedy nadejdzie czas, aby wysłać go do App Store, musimy uruchomić skrypt, aby wyrwać plasterki symulatora.

Jednak twórcy DoubleClick for Publishers (DFP) mają znaleźli sposób do stworzenia ram, które działa zarówno na symulatorze i urządzenia; Przesyła zgłoszenie do App Store; I nie wymaga żadnego skryptu do wyrwania plasterków symulatora (AFAIK). Wszystko, co naprawdę muszę zrobić, to przeciągnąć plik GoogleMobileAds.framework do Linked Frameworks and Libraries. To trochę zaskakujące, że nie muszę dodawać go do Embedded Binaries, tak jak większość dynamicznych frameworków.

Stworzyłem przykładowy projekt wykorzystujący DFP, który to demonstruje.

// clone repository 
git clone --recursive https://github.com/wh1pch81n/DoubleClickGoogleExample.git 

// Move to correct branch 
git submodule foreach 'git checkout master' 
git submodule foreach 'git pull origin master' 

Teraz możesz wybrać schemat Simulation_mate i uruchomić aplikację. Aplikacja wyświetli u dołu pojedynczy baner reklamowy, aby pokazać, że reklama faktycznie działa.

Wykres zależności wygląda następująco.

Simulation_mate.app 
    -> Mate.framework 
     -> DFP.framework 
     -> GoogleMobileAds.framework 

Ponownie, mogę uruchomić Simulation_mate na symulatorze, iPhone i mogę przesłać go do App Store.

Moje pytanie brzmi: jak na świecie stworzyli GoogleMobileAds.framework w ten sposób? Jakie kroki należy podjąć, aby stworzyć taką strukturę?

+0

Wąchuje jak struktura biblioteki statycznej. Czy możesz "plik" pliku binarnego wewnątrz struktury do testowania? Afaik, Google tworzy tylko statyczne frameworki w celu obsługi iOS 7. –

+0

Czy uważasz, że zamiast tego tworzysz kapsułę? możesz dystrybuować Pod i cocoapods zarządzać konfiguracją, aby skompilować framework dla odpowiedniej architektury, działa na symulator i urządzenie i nie ma problemów, gdy przesyłasz do sklepu z aplikacjami. – juanjo

+0

Nie mogę używać kakao lub Kartaginy ani narzędzia do zarządzania zależnością od osób trzecich. – DerrickHo328

Odpowiedz

6

Podejrzewa się, że GoogleMobileAds.framework to statyczna struktura, a nie dynamiczna struktura.

> file GoogleMobileAds 
GoogleMobileAds: Mach-O universal binary with 5 architectures: [arm_v7: current ar archive] [arm_v7s] [i386] [x86_64] [arm64] 
GoogleMobileAds (for architecture armv7): current ar archive 
GoogleMobileAds (for architecture armv7s): current ar archive 
GoogleMobileAds (for architecture i386): current ar archive random library 
GoogleMobileAds (for architecture x86_64): current ar archive random library 
GoogleMobileAds (for architecture arm64): current ar archive 

Zważywszy, bieganie file na dynamicznym ram, można uzyskać inny wynik:

> file AppKit 
AppKit: Mach-O universal binary with 2 architectures: [i386: Mach-O dynamically linked shared library i386] [x86_64] 
AppKit (for architecture i386): Mach-O dynamically linked shared library i386 
AppKit (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 

Niestety, opisać problem jest znanym ograniczeniem systemu dystrybucyjnego App Store. Teoretycznie prawidłowym sposobem dystrybucji dynamicznego środowiska powinna być dystrybucja pełnego pliku binarnego ze wszystkimi architekturami, a także niech system budujący wyrzuci niepotrzebne architektury podczas budowania, lub niech zrobi to system dystrybucyjny App Store podczas krojenia aplikacja dla konkretnych urządzeń ("slicing"). Gdybym miał zgadywać, dystrybucja App Store nie udała się z takimi frameworkami z powodu iOS 8 i poniżej wsparcia, ponieważ te systemy nie obsługują cięcia z App Store.

Powodem, dla którego Google tworzy biblioteki statyczne, jest obsługa iOS 7. Głupi powód w dzisiejszych czasach spowodował wiele problemów dla programistów, ponieważ Google nalega również na używanie CocoaPods.Struktury statyczne, choć na pierwszy rzut oka wydają się jak srebrna kulka ("brak skryptów do umieszczania na nich", bez osadzania "), w rzeczywistości nie są aż tak świetne. Na przykład, jeśli chcesz uwzględnić nieskompilowane zasoby, statyczne ramy nie zdziałają problemu (dynamiczne frameworki to pakiety, a statyczne frameworki nie).

+0

Dziękujemy za szczegółową odpowiedź. Nie podejrzewałem, że GoogleMobileAds.framework jest potajemnie biblioteką statyczną, ponieważ uważałem, że biblioteki statyczne mają rozszerzenie ".a". – DerrickHo328

+0

proszę odnieść się do tego linku https://www.raywenderlich.com/65964/create-a-framework-for-ios –

+0

Jest to jedna z tych rzeczy, jak KVOing a UIScrollView, która wydaje się działać głównie (i tak większość to), ale w rzeczywistości nie jest obsługiwany. Jeśli rozpowszechniasz swoją własną bibliotekę, rozważ pozostanie w sferze oficjalnie obsługiwanych metod (np. Rozpowszechniaj pliki binarne specyficzne dla danej platformy) i uratuj swoich użytkowników biblioteki przyszłym bólem głowy! – nolanw

Powiązane problemy