2012-06-14 17 views
44

Budujemy aplikację dla innej firmy. Trzymają klucz do podpisu i wolą nie udostępniać go nam.Budowanie aplikacji na iOS przy użyciu xcodebuild bez kodów

Powinna istnieć możliwość oddzielenia kompilacji i podpisu, ale jak mogę to określić w linii poleceń xcodebuild?

EDYTOWANIE dla osób przybywających tutaj z wyszukiwania. Przyjęta odpowiedź jest poprawna - robi to, o co pyta. Jednak, wielkie zdjęcie to oddzielając kompilację i kod (umożliwiając programistę, który nie ma klucza dystrybucji do zbudowania aplikacji). Nowsze wersje Xcode zapewniają narzędzia do tego. Nie jest to ściśle odpowiedź na to pytanie, więc zamieściłem ją jako istotę: https://gist.github.com/noamtm/5c3aaa0b615477162ccd.

+0

Czy tego właśnie szukasz? http://cydia.saurik.com/codesign.html – QED

+0

Po zmianie ustawień, oto, jak sprawdzić, czy pakiet aplikacji jest podpisany, czy nie: 'codesign -dv/Applications/AppName.app' – Daniel

Odpowiedz

96

Aby pominąć kod zalogowaniem można wykonać ręczną kompilację z konsoli tak:

xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO 

Korzystając dodatkowo parametry -configuration, -target i -sdk w celu określenia ustawień kompilacji.

Zapoznaj się z tym stackoverflow answer, aby uzyskać szczegółowy opis, jak wyłączyć podpisywanie kodu w Xcode.

+0

Dzięki. Jeszcze tego nie testowałem, ale ma to sens. – noamtm

+5

To działa, ale problem polega na tym, że nie można wygenerować wymaganych plików Entitlements i ResourceRules, które są potrzebne do polecenia 'codesign --entitlements ... --resource-rules ...'. Jest to szczególnie ważne, jeśli zamierzasz korzystać z iCloud. Generowanie tych plików nie jest trywialne. Zobacz także http://stackoverflow.com/questions/9280130/how-to-call-builtin-productpackagingutility-in-command-line. – Alexander

+1

dziękuję dziękuję DZIĘKUJĘ – liang

8

Niestety może być trudno zbudować aplikację w trybie zwolnienia bez podpisywania kodu. Dostaniesz błędy z systemu budowania, takie jak ten:

CodeSign error: code signing is required for product type 'Application' in SDK 
       'iOS 5.1' 

W tym przypadku, należy skonfigurować swój cel, aby korzystać z symboli wieloznacznych developer/team (*) Podpisanie tożsamości w trybie Release. Aplikacja zostanie z nią podpisana, gdy ją skompilujesz, i możesz ją wysłać do klienta, aby mógł zrezygnować z niej. To właśnie robi większość naszych outsourcingowych programistów.

Możesz wtedy usunąć informacje o podpisywaniu kodu, usuwając różne pliki w aplikacji, takie jak _CodeSignature i używając narzędzia codesign, aby usunąć informacje z pliku binarnego aplikacji. Ale nie jestem pewien, jakie to łatwe. To jednak nie jest tak istotne. W profilu informacyjnym lub w informacjach o podpisie nie ma żadnych poufnych informacji.

+0

Więc to byłby proces do budowania .ipa do wysyłki do klienta, który używa Citrix/Zenprise do wdrożenia aplikacji do swoich pracowników? Czy możesz skomentować mój post tutaj ?: http: // stackoverflow.com/questions/16089918/citrix-receiver-xenapp-xenmobile-zenprise-ipa-provisioning-and-wdrażanie- – whyoz

3

W Nawigatorze projektu wybierz projekt i otwórz sekcję "Ustawienia kompilacji" projektu (a nie konkretny cel).

W sekcji "Podpisywanie kodu" znajdź "Tożsamość podpisu kodu", a dla obu trybów debugowania i zwolnienia ustaw opcję "Any iOS SDK" na "Nie koduj znaku".

5

Aby całkowicie uniknąć podpisywania kodu z Xcode 7, użyłem wszystkich poniższych opcji:

CODE_SIGN_IDENTITY="" 
CODE_SIGNING_REQUIRED="NO" 
CODE_SIGN_ENTITLEMENTS="" 
CODE_SIGNING_ALLOWED="NO" 

Ostatnią opcją, CODE_SIGNING_ALLOWED="NO" wydawało się rade.

+0

Just chciałem zrobić to samo. Dziękuję za udostępnienie. –

+0

Uwaga: Nie mogę uzyskać uprawnień do dodawania (grup aplikacji) do pracy dla archiwum zbudowanego bez nich, nawet jeśli uruchomię oznaczenie z żądanym plikiem uprawnień. –

+0

Zauważ, że nie zrobiłbym tego hacka dla kompilacji archiwum. Po uruchomieniu/przetestowaniu aplikacji w trybie debugowania w symulatorze nie chcę wpisywać kodów. Działania archiwizujące zwykle wymagają oznaczeń kodów, prawdopodobnie nie należy ich w ogóle wyłączać. –

Powiązane problemy