Dodaj kompilacje dla różnych celów

1

Mam już wydaną wersję na urządzenia z systemem iOS 9+. Teraz chcę wydać nową wersję tylko dla urządzeń ARKit, które również wymagają Arm64. Ale moja kompilacja nie przejdzie weryfikacji w XCode dla wydania itunesconnect. Pokazuje błąd, że nie mogę zmienić zakresu urządzeń docelowych dla już wydanego pakietu bundleID. Ale jeśli zmienię bundleID w XCode, będzie to kolejna aplikacja. Chcę udostępnić aktualizację tylko dla aktywatorów ARKit, jak mogę to zrobić?

svnvav
źródło
Jeśli to jest ta sama aplikacja, dlaczego nie po prostu dodasz możliwości ARKit dla urządzeń, które mogą z niej korzystać i powrócić do starej implementacji starszych urządzeń? Nie będziesz mógł wydać nowej aplikacji pod tym samym pakietem ID.
Mateusz Szlosek
@MateuszSzlosek, funkcje ARKit nie są podstawową funkcjonalnością naszej aplikacji, ale naprawdę potrzebujemy jej do dodania do określonych urządzeń i pozostania starą aplikacją dla starych urządzeń.
svnvav

Odpowiedzi:

1

Nie możesz mieć oddzielnych kompilacji z tym samym identyfikatorem BundleID dostarczonych do AppStore. Jeśli naprawdę chcesz mieć „Coś specjalnego” dla urządzeń z obsługą ARKit - użyj pewnego rodzaju kontroli podczas uruchamiania aplikacji. Oto cytat z jabłko

Ważny   Wszystkie konfiguracje ARKit wymagają urządzenia z systemem iOS z procesorem A9 lub nowszym. Jeśli Twoja aplikacja w inny sposób obsługuje inne urządzenia i oferuje rozszerzoną rzeczywistość jako funkcję dodatkową, użyj tej właściwości, aby określić, czy zaoferować użytkownikowi funkcje oparte na AR.   Jeśli twoja aplikacja wymaga ARKit ze względu na swoją podstawową funkcjonalność, użyj klucza arkit w sekcji UIRequiredDeviceCapabilities aplikacji Info.plist, aby aplikacja była dostępna tylko na urządzeniach obsługujących ARKit.

Więc możesz użyć ARConfiguration.isSupported sprawdzić możliwości urządzenia w czasie wykonywania. Jeśli to nie jest obsługiwane, powróć do implementacji „starej”.

W celu skompilowania kodu dla celów & lt; 11 możesz oznaczać metody lub nawet klasy za pomocą @available(iOS 11.0, *) w ten sposób:

@available(iOS 11.0, *)
func doSomeARStuff() {
    if ARConfiguration.isSupported { print("Supported") }
}

Aby wywołać te metody, używając istniejącego kodu, wykonaj następujące czynności:

if #available(iOS 11.0, *) {
    doSomeARStuff()
} else {
    // Fallback on earlier versions
}
Mateusz Szlosek
źródło