W następstwie tych instrukcji (patrz także dokumentacja dla programistów Apple i odpowiedź BoltClock do testowania aplikacji na iOS na urządzeniu bez programu apple dewelopera lub jailbreak ), udało mi się skompilować aplikację na iOS (w tym przypadku pochodzenia , gry wideo emulatora konsoli aplikacji, która nie spełniają wytyczne Apple i nigdy nie będą dozwolone w Apple App Store) w Xcode 7, podpisz je moim osobistym kontem iCloud, sideload to my iPhone (podłączając go do mojego Maca przez USB i wybierając mojego iPhone'a w menu xcode -> Produkt -> Miejsce docelowe) i pozwól, aby mój telefon go uruchomił, „ufając” aplikacjom z tym podpisem w Ustawieniach -> Ogólne -> Profil, który instaluje certyfikat powiązany z moim kontem icloud na urządzeniu.
Chciałbym powtórzyć te kroki przy pobieraniu bezprzewodowym. Czy mogę poprosić Xcode o wykonanie pliku wykonywalnego, który mogę udostępnić mojemu bratu, który ma iPhone'a, ale nie ma dostępu do komputera Mac z Xcode?
Sieć StackExchange osiągnęła coś takiego najwyraźniej w swojej wersji beta aplikacji na iOS, wykorzystując korporacyjną dystrybucję Apple za pośrednictwem Mobile Device Management, jak wspomniano w tym pytaniu . Istnieje również BuildStore ( http://builds.io/ ), który za 10 USD rocznie zapewnia również tę funkcjonalność, najwyraźniej poprzez dodanie użytkowników do „zespołu programistów” powiązanego z płatnym kontem Programu dla programistów Apple (patrz dokumenty programistów Apple ) . Czy w Xcode 7 można to zrobić bez konta firmowego, a nawet zwykłego płatnego konta programisty?
aktualizacja: Dzięki pomocy Stackszy poczyniłem pewne postępy, które tu streszczę.
- XCode utworzy archiwum (Produkt -> Archiwum), ale nie pozwala eksportować archiwum do pliku .ipa w celu dystrybucji ad hoc bez subskrybowania warstwy płatnego konta ADP.
- Nie ma problemu, chociaż, ponieważ narzędzie linii poleceń Xcode robi utworzyć plik wykonywalny .ipa, nawet bez płatnego konta ADP. Użyj polecenia podobnego
xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance
(patrz odpowiedź Khawara na stronie Jak utworzyć ipa w xcode 6 bez konta Apple Developer? ) - Ale to polecenie wymaga podania pliku manifestu .plist. Odpowiedź Razvana z Over The Air (OTA) iOS IPA File Distribution For Public? zawiera przykładowy manifest.plist, a także instrukcje dotyczące formatu hiperłącza niezbędnego do udostępnienia łącza pobierania, które musi być hostowane na stronie SSL. Być może adres URL SSL musi być zgodny z identyfikatorem pakietu aplikacji, nie jestem pewien.
- Ale powyższe działa tylko wtedy, gdy aplikacja jest przystosowana do urządzenia, które ją pobiera, a urządzenie ma już zainstalowany certyfikat programisty. Na przykład urządzenie, które wcześniej było podłączone przez USB do mojego Xcode, może teraz pobrać aplikację bezprzewodowo, co jest świetne. To jest postęp. Ale w przypadku czystych urządzeń pojawia się błąd
Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)
(wyświetlany w konsoli urządzenia, którą można wyświetlić w Xcode -> Okno -> Urządzenia lub w aplikacji Apple Configurator). - Aby aplikacja mogła zostać udostępniona dla urządzenia, musi zawierać UDID urządzenia w
embedded.mobileprovision
pliku, zobacz Jak osadzić profil obsługi administracyjnej w aplikacji na system iOS , Jak zautomatyzować sprawdzanie pola w empa.mobileprovision? , Jak dowiedzieć się, jakiego profilu użyto do zbudowania pliku * .ipa? i Czy istnieje sposób, aby zobaczyć, jaki UDID jest zawarty w kompilacji? . Nie można jednak po prostu edytować tego pliku, aby dodać identyfikator UDID, ponieważ wówczas CODESIGNATURE aplikacji nie pasuje, a urządzenie zgłosi błądFailed to verify code signature of /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.7jBjpk/extracted/Payload/Provenance.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)}
- Ok, więc musimy zrezygnować z aplikacji. Xcode zapewnia narzędzie wiersza polecenia o nazwie,
codesign
które może to zrobić. Instrukcje znajdują się na stronie Jak ponownie podpisać plik IPA? i ponownie podpisz IPA (iPhone) i zrezygnuj z aplikacji na iPhone'a, wstaw nowy identyfikator pakietu i wyślij do Xcode Organizer w celu przesłania oraz sposobu ręcznego ponownego podpisania IPA za pomocą nowego profilu udostępniania . Musiałem określić mój certyfikat programisty, którego dokładną nazwę można znaleźć w Keychain Access, na karcie Certyfikaty i wygląda jak „Twórca iPhone: nazwa_użytkownika@mac.com (ABCDEFGHIJ)”. Zatem polecenie jest jakcodesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.app
. Przykładowe polecenia w powyższych instrukcjach zawierały flagę o nazwie--resource-rules
, ale nie znalazłem takiego pliku w mojej skompilowanej aplikacji, więc usunąłem tę flagę. Zastanawiam się, co robi i czy jest to konieczne. Edycja: Znakomity post na blogu Inside Code Signing autorstwa Thomasa Kollbacha wyjaśnia, że--resource-rules
flaga służyła do określania, które części aplikacji muszą być podpisane, ale ponieważ iOS8 jest przestarzałe, a cała aplikacja musi być podpisana. - Teraz, gdy aplikacja ma dodany identyfikator UDID i jest podpisana, pobranie go na nowe urządzenie powoduje błędy
Could not install embedded profile: 0xe8008003 (This provisioning profile is malformed
iA valid provisioning profile for this executable was not found
. Domyślam się, że teraz problemem jest to, że urządzenie nadal nie zainstalowało certyfikatu programisty. Podczas ładowania bocznego przez Xcode, zanim aplikacja się uruchomi, musisz znaleźć zainstalowany certyfikat w Ustawieniach -> Ogólne -> Profil, wybierz swój certyfikat i dotknij „zaufaj”. Jednak ta opcja nie pojawia się po bezprzewodowym pobraniu aplikacji ad hoc, więc nie jestem pewien, jak postępować. Myślę, że potrzebuję sposobu na zainstalowanie certyfikatu programisty na urządzeniu. Zgodnie z instalacją profilu informacyjnego na iOS 8.0.2, było to możliwe po prostu wysyłając certyfikat do urządzenia pocztą e-mail, ale to już nie działa od iOS 8. Nie próbowałem tego potwierdzać. Jak mogę zdalnie zainstalować mój certyfikat programisty na urządzeniu z systemem iOS? - Próbowałem wyeksportować certyfikat programisty iPhone'a z Keychain Access i wysłać go pocztą e-mail na urządzenie. Urządzenie było w stanie zainstalować certyfikat, ale wyświetlało się z czerwonym ostrzeżeniem, że nie jest podpisane, podczas gdy certyfikat był instalowany przez Xcode / USB, nie miał takiego ostrzeżenia. Czy według Rhythmic Fistman można ponownie zaszyfrować plik embedded.mobileprovision? , aby działał, profil musi być podpisany przez Apple. Może to być punkt zaczepienia. Apple podpisze Twój certyfikat tylko wtedy, gdy masz płatne konto ADP.
- Ten post na blogu o zaopatrzeniu autorstwa Seana Hebera był bardzo pouczający na temat ogólnej teorii certyfikatów deweloperskich i profili obsługi administracyjnej (wraz z Kollbacha powinny być wymagane przeczytanie ich obu). Zawiera ten akapit:
Wszystko to działa i jest bezpieczne, ponieważ Apple generuje profile udostępniania w portalu, a następnie podpisuje je własnymi kluczami prywatnymi przed dostarczeniem ich do Ciebie. Podpisywanie profili udostępniania jest czymś, co może zrobić tylko Apple. Pobranego pliku nie można zatem sfałszować bez unieważnienia go. Nieprawidłowy profil udostępniania nie zostanie zaakceptowany przez iOS, a zatem Apple może kontrolować dokładnie to, co może, a czego nie może zapewnić programista, po prostu ograniczając dostęp do podpisywania profilu udostępniania do rzeczy, które portal programisty daje użytkownikowi do skonfigurowania w pierwszej kolejności miejsce - nawet jeśli profile udostępniania mogą obsługiwać dowolną liczbę innych niesamowitych opcji, których nie można użyć bez jailbreaka. Dlatego musisz zarejestrować urządzenia testowe w portalu, dodaj swoje certyfikaty do portalu itp. - w wygenerowanym i odpowiednio podpisanym profilu informacyjnym można uwzględnić tylko elementy w portalu (a tym samym ich liczbę można kontrolować i ograniczać dowolnie przez Apple). Portal jest miejscem egzekwowania zasad i ograniczeń Apple dotyczących udostępniania.
To wydaje się definitywnie odpowiedzieć na moje pytanie (czy mogę uruchomić aplikację bez płatnego konta ADP) z „nie”. Chociaż ten artykuł poprzedza Xcode 7. Najwyraźniej Xcode 7 wyśle identyfikator UDID urządzenia do portalu Apple i otrzyma w odpowiedzi profil informacyjny podpisany przez Apple, zawierający ten UDID. Xcode 7 robi to tylko wtedy, gdy urządzenie jest podłączone przez USB i rozpoznane przez Xcode, ale zastanawia się, czy można spreparować ręczne żądanie Xcode do Apple? To zagłębia się w inżynierię wsteczną w rzeczy Apple, z którymi nie czuję się komfortowo i prawdopodobnie narusza ToS lub cokolwiek, więc myślę, że jestem zadowolony z odpowiedzi „nie”.
Według strony about BuildStore , zarządzają czymś podobnym przez e-mail, więc może to być możliwe.
Xcode „Build and Archive” z wiersza poleceń jest dość stary (około xcode 3), ale sugeruje użycie xcrun
zamiast tego, xcodebuild
którego używałem.