2015-01-09 15 views
7

Aplikacje iOS zbudowane z Xcode 6 lub nowszym umożliwiają osadzanie w nich dynamicznych frameworków iOS. Buduję wspólną strukturę i chciałbym osadzić pod-framework. Jak mogę to zrobić?Osadzanie ram w ramach (iOS 8+)

Uwaga: To jestmożliwe i jest wykorzystywane w produkcji (na przykład, z ramami Swift CocoaPods).

Odpowiedz

6

Znaleziono odpowiedź. Oto jak to zrobić:

  • Przejdź do Cel>Build Fazy
  • Kliknij ikonę mały "+" i wybierz "New Run Script Budowanie Phase"
  • Wklej następujący:

    cd $BUILT_PRODUCTS_DIR 
    
    mkdir $PROJECT_NAME.framework/Frameworks &>/dev/null 
    
    for framework in *.framework; do 
        if [ $framework != $PROJECT_NAME.framework ]; then 
         cp -r $framework $PROJECT_NAME.framework/Frameworks/ &>/dev/null 
        fi 
    done 
    
+3

To działa, ale tylko dodać, że ramy, która osadza sub -ramki są znane jako "ramy parasolowe" i są odradzane przez Apple. Zobacz to pytanie, aby uzyskać doskonałą odpowiedź na pytanie, dlaczego tak się dzieje: http://stackoverflow.com/questions/7365578/why-are-umbrella-frameworks-discouraged Co powinieneś robić: zamiast osadzać pod-ramy, powinieneś najlepiej rozpowszechniaj swój framework wraz z jego zależnościami osobno. –

+1

@ JonathanEllis To nie zawsze jest idealne. Na przykład dodałem obsługę WebP przy użyciu WebP.framework. Nie chcę, aby moja główna aplikacja, rozszerzenie edycji zdjęć i rozszerzenie iMessage zawierały osobną kopię WebP.framework. Odpady kosmiczne ... – jjxtra

6

@Vatsal Manot odpowiedź była bardzo pomocna dla mnie. Zmodyfikowałem go trochę, a także miałem potrzebę podpisania skopiowanego osadzonego środowiska. Mój skrypt znajduje się poniżej.

cd $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Frameworks/Custom.framework/Frameworks 
for framework in *.framework; do 
    mv $framework $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Frameworks/ 
    /usr/bin/codesign --force --sign "iPhone Developer" --preserve-metadata=identifier,entitlements --timestamp=none $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Frameworks/$framework 
done