Czy każdą aplikację można uruchomić na systemie iOS?

Nie, nie można uruchomić każdej aplikacji na urządzeniu z systemem iOS. Wszystkie aplikacje przed dopuszczeniem do użytku muszą zostać zweryfikowane przez Apple. Oczywiście w trakcie prac rozwojowych nad nowymi apkami nie musimy każdorazowo wysyłać ich do Apple w celu zatwierdzenia, np. aby móc je przetestować. Do tego celu Apple dla członków Apple Developer Program daje możliwość dystrybucji aplikacji do dedykowanych urządzeń – tryb AdHoc i do urządzeń teamu developerskiego – tryb Development. W takim kontekście pojawia się provisioning profile czyli profil zabezpieczeń, który jest odpowiedzialny za weryfikacje uprawnień aplikacji.

Co to jest provisioning profile?

Provisioning profile odpowiada za wyposażenie aplikacji w cyfrowe znaczniki jednoznacznie wiążące programistę i urządzenie z autoryzowanym przez firmę Apple zespołem developerskim i w ten sposób umożliwia testowanie aplikacji na danym urządzeniu. Innymi słowy provisioning profile zawiera certyfikat dewelopera (development certificate) oraz informacje o aplikacji (App ID)  i urządzeniu (Unique Device ID) wymagane do zainstalowania aplikacji na urządzeniu iOS.

Jak działa provisioning profile?

Po podłączeniu iPhone’a do środowiska Xcode następuje poniższa sekwencja:

  • z urządzenia pobierany jest jego unikalny identyfikator – UUID,
  • na podstawie identyfikatora bundle identifier zawartego w ustawieniach projektu aplikacji Xcode pobierany jest AppID,
  • Xcode wyszukuje odpowiednio pasujący provisioning profile dla danego AppID,
  • następuje sprawdzenie, czy na liście dozwolonych urządzeń zawartych w profilu zabezpieczeń znajduje się UUID urządzenia
    • jeżeli UUID jest na liście dozwolonych urządzeń, Xcode przechodzi do następnego punktu,
    • jeżeli UUID nie ma na liście dozwolonych urządzeń, Xcode podejmuje odpowiednie działanie:
      • gdy jest ustawione automatyczne podpisywanie (automatic signing), Xcode próbuje połączyć się z portalem Apple Developer i dodać automatycznie urządzenie z podanym UUID do listy uprawnionych oraz pobrać nowy provisioning profile,
        Gdy to się uda, następuje przejście do następnego punktu. W przeciwnym przypadku przerywa proces i alarmuje programistę o napotkanym problemie,
      • gdy nie masz automatycznego podpisywania musisz samodzielnie wygenerować nowy profil zabezpieczeń (provisioning profile).
  • provisioning profile zawierający na liście UUID urządzenia razem z certyfikatem developera używany jest do podpisania kodu aplikacji.

Jeśli wszystkie powyższe kroki zakończą się pomyślnie, aplikacja zostanie poprawnie zbudowana przez Xcode’a, wtedy plik binarny podpisany certyfikatem developera (kluczem prywatnym) z aktualnym provisioning profile jest wysyłany do urządzenia.

Gdy aplikacja jest instalowana na urządzeniu z trybu AdHoc lub Development, biniaria są weryfikowane pod kątem zawartego profilu zabezpieczenia w aplikacji. W pierwszej kolejności sprawdzany jest certyfikat Developera (czy podpis kluczem prywatnym zgadza się przechowywanym przez Apple kluczem publicznym). W kolejnym kroku sprawdza się, czy identyfikator UUID znajduje się na zawartej w aplikacji profilu zabezpieczeń. Gdy wszystko się zgadza, aplikacja jest uruchamiana. W przeciwnym przypadku – aplikacja nie zostanie uruchomiona, a ikona pozostanie wyszarzona lub zniknie z urządzenia.

Taki proces weryfikacji nie dotyczy aplikacji instalowanej bezpośrednio ze sklepu AppStore, dla której dozwolnone są wszystkie UUID, a sama aplikacja podpisana jest kluczem prywatnym dystrybucyjnym calego zespołu.

Jakie są ograniczenia?

W ramach standardowego programu Apple Developer Program, można zarejestrować 100 iPhone’ów, 100 iPad’ów, 100 iPod’ów, 100 Apple TV oraz 100 Apple Watch’ów.

Jak utworzyć provisioning profile?

Przed rozpoczęciem uzyskaj certyfikat iOS Developer Certificate na portalu Apple Developer Portal. Jeśli jeszcze go nie masz, musisz najpierw stworzyć sobie Apple ID i dołączyć do programu, co wiąże się z opłatą.

Dodanie nowego urządzenia

Aby dodać nowe urządzenie do listy, musisz znać jego unikalny identyfikator UUID. Uruchom Xcode i wybierz menu Window >> Devices and Simulators (lub użyj skrótu klawiaturowego ⇧⌘2). Podłącz urządzanie do komputera (kablem USB lub przez Wifi). Kliknij w pole Identifier i skopiuj wartość identyfikatora.

  1. Otwórz stronę portalu Apple Developer Portal i przejdź do sekcji Account.
  2. Wybierz Certificates, Indentifiers & Profiles z lewego menu.
  3. Następnie wybierz sekcję Devices.
  4. Kliknij w ikone + przy nazwie sekcji aby przejść do formularza dodawania urządzenia.
  5. Wybierz rodzaj urządzenia – iOS, tvOS, watchOS
  6. Wprowadź swoją nazwę na urządzenie np. iPhone Bartka
  7. W polu Device ID (UUID) wprowadź identyfikator skopiowany z Xcode’a.
  8. Kliknij przycisk Continue.

Utworzenie nowego profilu zabezpieczeń

  1. Otwórz stronę portalu Apple Developer Portal i przejdź do sekcji Account.
  2. Wybierz Certificates, Indentifiers & Profiles z lewego menu.
  3. Następnie wybierz sekcję Profiles.
  4. Wybierz typ profilu, który potrzebujesz:
  1. Następnie wybierz AppID na podstawie bundle identifier (musisz wcześniej zarejestrować taki identyfikator na tej stronie).
  2. W kolejnym kroku musisz wybrać certyfikat developer.
  3. Następnie provisioning profile zostanie wygenerowany.

Modyfikacja profilu zabezpieczeń

  1. Otwórz stronę portalu Apple Developer Portal i przejdź do sekcji Account.
  2. Wybierz Certificates, Indentifiers & Profiles z lewego menu.
  3. Następnie wybierz sekcję Profiles.
  4. Wybierz z listy profil, który chcesz zmodyfikować, następnie wybierz opcję Edit.
  5. Zaznacz lub odznacz wybrane urządzenia z listy uprawnionych, które chcesz zmodyfikować, a następnie kliknij opcje Save. Profil zostanie zmodyfikowany.

Wygenerowany provisioning profile możesz samodzielnie pobrać ze strony a następnie wystarczy, że dwukrotnie klikniesz na ikonie pobranego pliku, a zostanie on automatycznie otworzony przez Xcode’a i skopiowany w odpowiednie miejsce. 

Drugim sposobem pobrania profili zabezpieczeń jest uruchomienie Xcode’a, wybranie opcji Preferences przeze wybranie opcji Download Manual Profiles.