Xcode 27 porzuca Intela: co się kończy, a co nadal da się wydać
Zmianę dotyczącą Intela, która z największym prawdopodobieństwem zmieni już wydawany plik binarny, Apple umieściło w sekcji New Features, a nie Deprecations. Informacje o wydaniu Xcode 27 zawierają sekcję zatytułowaną Intel Deprecation z dokładnie dwoma wpisami, a ten, przez który aplikacja macOS przestaje domyślnie budować się jako Universal, znalazł się po stronie New Features.12
TL;DR
- Za nagłówkiem kryją się trzy odrębne zmiany, a zdania samego Apple wyraźnie je rozdzielają. Xcode 27 instaluje się i działa wyłącznie na Macach z Apple silicon.2 SDK macOS 27 nadal pozwala wydawać aplikacje Universal wstecz, na macOS 12 i nowsze.2 A
ARCHS_STANDARDprzestaje zawieraćx86_64, gdy deployment target macOS lub DriverKit danego targetu osiąga 27.0.1 - Tylko trzecia z nich zmienia to, co trafia do użytkowników — i robi to bez żadnego komunikatu. Rozwiązanie Apple podaje w tym samym wpisie: „Architekturę x86_64 można dodać do ustawienia kompilacji
ARCHS, jeśli jest to potrzebne.”1 - Xcode 26.6 nie pozwala podejrzeć nowego zachowania. Wymusiłem
MACOSX_DEPLOYMENT_TARGET=27.0w projekcie przeznaczonym wyłącznie na macOS, aARCHS_STANDARDnadal rozwiązywało się doarm64 x86_64.13 - Dwa nawyki przy audycie produkują błędne odpowiedzi. Po podaniu
-sdk macosxprojekt tworzony wyłącznie na iOS raportowałSUPPORTED_PLATFORMS = macosxiARCHS_STANDARD = arm64 x86_64, a rozwiązywanie ustawień na poziomie projektu ukryło dwa targety macOS w projekcie, którego domyślny target to iOS.14 - W 11 moich projektach Xcode, obejmujących 44 targety: 21 buduje się dla macOS, najwyższy deployment target macOS wśród nich to 26.5, a żaden nie ustawia
ARCHSaniEXCLUDED_ARCHS.14 Wszystkie 51 archiwów macOS na dysku tox86_64 arm64.14 - Koniec oprogramowania dla Intela przypada na macOS 28, a nie na Xcode 27, a zdanie Apple zawiera wyjątek, który warto przeczytać: „Żadne oprogramowanie oparte na Intelu nie będzie już zgodne z macOS 28.0, z wyłączeniem starszych gier.”10
Wszystko powyższe Apple publikuje jako tekst bety — w informacjach o wydaniu Xcode 27 beta 4 oraz macOS 27 beta 4.36
Trzy zdania, trzy różne zmiany
Sekcja Intel Deprecation zawiera dwa wpisy. Odczytanie ich jako jednej tezy prowadzi do błędnej decyzji w obie strony.
Wpis o wycofaniu dotyczy maszyny stojącej na biurku i nie zostawia furtki: „Xcode 27 będzie się instalować i działać wyłącznie na Macach z Apple silicon.”2 Żadne ustawienie kompilacji tego nie zmieni. Mac z procesorem Intela przestaje być maszyną, na której działa aktualny Xcode, a tabela zgodności Apple dokłada do wymogu sprzętowego również programowy, wskazując macOS Tahoe 26.4 lub nowszy jako wymaganie dla Xcode 27 beta 4.4
Ten sam wpis chroni następnie to, co powstaje na wyjściu: „SDK macOS 27 obsługuje wsteczne wdrażanie aplikacji Universal (Intel i Apple Silicon) na macOS 12 i nowsze.”2 Tabela zgodności Apple to potwierdza: dla Xcode 27 beta 4 pokazuje zakres wdrożeniowy macOS od 12 do 27, wobec 11–26.5 dla Xcode 26.6.4 Dolna granica przesunęła się dokładnie o jedno wydanie. Binaria Universal przetrwały.
Wpis zamyka się zaś zachowaniem samego przepływu pracy: „Programowanie pod Intela jest nadal możliwe na wersjach macOS, które obsługują Rosettę, takich jak macOS 27.”2
Pozostaje wpis z New Features — ten, który jest w stanie zmienić produkt już wydawany:
Targety, których minimalny deployment target ustawiono na macOS 27.0 lub DriverKit 27.0, nie będą domyślnie budowane jako Universal. Ustawienie kompilacji
ARCHS_STANDARDprzestanie zawierać x86_64, gdyMACOSX_DEPLOYMENT_TARGETlubDRIVERKIT_DEPLOYMENT_TARGET>= 27.0. Architekturę x86_64 można dodać do ustawienia kompilacjiARCHS, jeśli jest to potrzebne.1
Warto rozdzielić cztery szczegóły. Apple wymienia dwa ustawienia i żadnych innych, więc IPHONEOS_DEPLOYMENT_TARGET i jego odpowiedniki pozostają poza tą regułą. Apple podaje próg, a nie wersję toolchainu, więc wyzwalaczem jest przekroczenie 27.0 przez własny deployment target. Apple pisze „nie będą domyślnie budowane jako Universal”, co opisuje wartość domyślną, a nie zakaz. I w tym samym oddechu Apple podaje furtkę, wskazując ARCHS jako miejsce, w którym można przywrócić x86_64.
Wartość domyślna, która zmienia się bez błędu
Mechanizm jest zwyczajny — i właśnie dlatego przechodzi bez echa. Dokumentacja ustawień kompilacji Apple opisuje ARCHS jako „listę architektur, dla których produkt zostanie zbudowany. Zwykle ustawia się je na predefiniowane ustawienie kompilacji dostarczone przez platformę. Jeśli podano więcej niż jedną architekturę, powstanie plik binarny universal.”5 Tym predefiniowanym ustawieniem jest ARCHS_STANDARD, a Apple potwierdza tę zależność w innym miejscu tej samej dokumentacji, zaznaczając przy uwierzytelnianiu wskaźników, że „nie ma ono efektu, jeśli ARCHS nadpisano tak, aby nie opierało się na ARCHS_STANDARD.”5
Target, który nigdy nie wspomina o ARCHS, dziedziczy więc to, co poda mu platforma. Wystarczy zmienić to, co podaje platforma, a produkt zmienia kształt bez edycji jakiegokolwiek pliku w kontroli wersji.
Nic w tej zmianie nie kończy się niepowodzeniem. Kompilator działa, linker działa, archiwum przechodzi walidację. Nic w toolchainie nie traktuje kompilacji macOS z jedną architekturą arm64 jako błędu, bo błędem nie jest. Powstaje poprawna, podpisana aplikacja macOS z jedną architekturą tam, gdzie wcześniej miała dwie. Na Macu z Apple silicon — czyli na maszynie, z której z konieczności korzysta teraz każdy programista Xcode 27 — kompilacja wyłącznie arm64 uruchamia się i zachowuje identycznie. Regresja ujawnia się na sprzęcie, którego w budynku już nie ma.
Nazwanie tego trybu awarii cichym to mój opis, nie Apple; Apple opisuje wartość domyślną i na tym kończy. Apple mówi natomiast, że poprawka polega na dodaniu, a to sformułowanie ma znaczenie przy planowaniu: x86_64 „można dodać do ustawienia kompilacji ARCHS, jeśli jest to potrzebne.”1 Ocenę samej potrzeby Apple zostawia czytelnikowi.
Co Xcode 26.6 powie, a czego nie powie
Na moim komputerze działa Xcode 26.6 (build 17F113) na macOS 26.5.2, więc w tym artykule nie pojawia się nigdzie zachowanie Xcode 27.13 Pożyteczne pytanie, na które potrafi odpowiedzieć poprzedni toolchain, brzmi: czy już zachowuje się po nowemu. Nie zachowuje się.
Skierowanie xcodebuild na projekt przeznaczony wyłącznie na macOS i nadpisanie deployment targetu ponad próg wskazany przez Apple nie rusza listy architektur:13
xcodebuild -showBuildSettings -project Cels.xcodeproj \
-configuration Release -sdk macosx \
MACOSX_DEPLOYMENT_TARGET=27.0 2>/dev/null \
| grep -E "^ +(ARCHS|ARCHS_STANDARD|MACOSX_DEPLOYMENT_TARGET) ="
MACOSX_DEPLOYMENT_TARGET = 27.0
ARCHS = arm64 x86_64
ARCHS_STANDARD = arm64 x86_64
MACOSX_DEPLOYMENT_TARGET = 27.0
Pierwszy wiersz to xcodebuild odbijający nadpisanie z powrotem; reszta to wartości rozwiązane. To samo polecenie przy 26.0 zwraca identyczne wiersze z architekturami.13 Xcode 26.6 nie implementuje progu, więc nikt nie przećwiczy tej zmiany na obecnym toolchainie; każde porównanie „przed i po” czeka na Xcode 27 na Macu z Apple silicon.
Zakres platformowy da się natomiast odtworzyć już dziś. Ten sam projekt rozwiązany względem SDK dla iOS zwraca ARCHS_STANDARD = arm64, gdzie nie ma czego stracić, podczas gdy SDK dla macOS zwraca arm64 x86_64.13 Wpis Apple wymienia wyłącznie deployment targety macOS i DriverKit, a iOS-owa strona projektu wieloplatformowego niczym nie ryzykuje.
Jak zbadać własną ekspozycję, nie wymyślając jej
Dwa nawyki dają pewne siebie, błędne odpowiedzi. Wpadłem w oba.
Pierwszy to podawanie -sdk macosx, żeby sprawdzić, czy projekt buduje się dla macOS. Flaga nadpisuje własny SDK projektu, więc Xcode odpowiada na pytanie o flagę, a nie o projekt. Zapytany bez nadpisania, mój projekt przeglądarki tworzony wyłącznie na iOS podaje swoją prawdziwą platformę; zapytany z -sdk macosx, ten sam projekt raportuje SUPPORTED_PLATFORMS = macosx i ARCHS_STANDARD = arm64 x86_64, co jest czystym artefaktem.14 Proszę zacząć w ogóle bez -sdk:
xcodebuild -showBuildSettings -project YourApp.xcodeproj \
-configuration Release 2>/dev/null \
| grep -E "^ +(SUPPORTED_PLATFORMS|SDKROOT) ="
W przypadku mojej jedynej aplikacji przeznaczonej wyłącznie na macOS wracają dwa wiersze:14
SDKROOT = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.5.sdk
SUPPORTED_PLATFORMS = macosx
Czytać trzeba oba wiersze, nigdy jeden. Ten projekt deklaruje SDKROOT = macosx i nie ma w ogóle wiersza SUPPORTED_PLATFORMS, więc tekstowe przeszukanie plików projektu pod kątem SUPPORTED_PLATFORMS daje mu zero punktów i pomija jedyną moją aplikację przeznaczoną wyłącznie na macOS.14 Rozwiązane ustawienia uzupełniają tę lukę z SDK; grep tego nie potrafi. Na tym etapie warto zignorować MACOSX_DEPLOYMENT_TARGET, bo Xcode dostarcza go niezależnie od wszystkiego: trzy moje projekty przeznaczone wyłącznie na iOS i tak raportują deployment target macOS — dwa 26.5, jeden 26.2.14
Drugi nawyk to rozwiązywanie ustawień na poziomie projektu. xcodebuild -showBuildSettings bez -target odpowiada dla jednego targetu, a projekt mieszany chowa resztę. Mój projekt rozszerzenia do Safari rozwiązał się do SUPPORTED_PLATFORMS = iphoneos iphonesimulator i ARCHS_STANDARD = arm64, co czyta się jak projekt wyłącznie iOS-owy, bez żadnej ekspozycji na Intela. Wyliczenie jego targetów pokazało cztery, w tym dwa dla macOS, oba rozwiązujące się do arm64 x86_64:14
xcodebuild -list -project YourApp.xcodeproj
for t in TargetA TargetB; do
xcodebuild -showBuildSettings -project YourApp.xcodeproj \
-target "$t" -configuration Release 2>/dev/null \
| grep -E "^ +(SUPPORTED_PLATFORMS|MACOSX_DEPLOYMENT_TARGET|ARCHS_STANDARD) ="
done
Jedna osobliwość, której należy się spodziewać: target z SDKROOT = auto nie rozwiązuje ARCHS_STANDARD, dopóki nie wskaże się SDK, więc 15 z moich 21 targetów macOS nie drukuje w tym wierszu niczego, dopóki polecenie nie doda -sdk macosx — wtedy ich projekty rozwiązują się do arm64 x86_64.14 Pusto znaczy „nierozwiązane”, a nie „puste”.
Potem trzeba przestać ufać ustawieniom i przeczytać plik binarny. Ustawienia kompilacji opisują zamiar; lipo opisuje artefakt, który faktycznie trafił do użytkowników:
lipo -archs YourApp.xcarchive/Products/Applications/YourApp.app/Contents/MacOS/YourApp
x86_64 arm64
Lepiej sięgnąć po lipo niż po metadane samego archiwum. Dwa moje archiwa nie zawierają w Info.plist żadnej listy architektur ApplicationProperties, więc zapytanie plutil do archiwum nie zwraca nic, podczas gdy lipo na binarce w środku zwraca x86_64 arm64.14 Brak w metadanych oznacza, że archiwum zapisano inaczej, a nie że aplikacja straciła architekturę.
Co naprawdę zawiera 11 projektów
Audyt objął 11 projektów Xcode z 44 targetami. Osiem projektów zawiera co najmniej jeden target macOS, 21 targetów buduje się dla macOS, a ekspozycja na nową wartość domyślną wynosi dziś zero.14
| Projekt | Targety macOS | MACOSX_DEPLOYMENT_TARGET |
Jawne ARCHS |
Zarchiwizowana binarka macOS |
|---|---|---|---|---|
| Reps | 3 z 4 | 26.0, 26.2 | brak | brak archiwum macOS |
| Return | 3 z 10 | 26.1 | brak | x86_64 arm64 |
| Banana List | 3 z 6 | 26.0 | brak | x86_64 arm64 |
| Water | 3 z 3 | 26.0 | brak | brak na dysku |
| Yawara | 3 z 3 | 26.5 | brak | brak na dysku |
| Cels | 3 z 3 | 26.0 | brak | x86_64 arm64 |
| ResumeGeni for Safari | 2 z 4 | 13.0 | brak | x86_64 arm64 |
| Tile | 1 z 1 | 15.0 | brak | x86_64 arm64 |
| Ace Citizenship | 0 z 4 | nie dotyczy | brak | nie dotyczy |
| ResumeGeni | 0 z 3 | nie dotyczy | brak | nie dotyczy |
| Shikigami | 0 z 3 | nie dotyczy | brak | nie dotyczy |
| Razem | 21 z 44 | maks. 26.5 | 0 | wszystkie Universal |
Najwyższy deployment target macOS w całej flocie to 26.5, najniższy 13.0 — w rozszerzeniu do Safari, do którego od dawna nikt nie wracał. Żaden target nie przekracza 27.0, więc żaden nie wchodzi w reżim zmienionej wartości domyślnej, dopóki ktoś ręcznie nie podniesie liczby. Zero targetów ustawia ARCHS, zero ustawia EXCLUDED_ARCHS, a we flocie nie ma ani jednego pliku .xcconfig, więc każda decyzja o architekturze we wszystkich 44 targetach pochodzi z ARCHS_STANDARD.14
Dowód z archiwów jest mocniejszy niż dowód z ustawień, bo archiwa zapisują to, co faktycznie zostało wydane. Na moim komputerze leży 79 archiwów zbudowanych między kwietniem a lipcem 2026 roku. Wszystkie 51 archiwów macOS, obejmujących siedem różnych produktów, raportuje x86_64 arm64. Wszystkie 28 archiwów z rodziny iOS raportuje arm64.14 W żadnym z tych projektów nikt nigdy nie wybrał Universal; za każdym razem tworzyła je wartość domyślna. To właśnie na tej populacji działa zmiana Apple — i dokładnie dlatego nikt jej nie zauważy.
Jedna uczciwa luka: podniesienie deployment targetu do 27.0 jest aktem świadomym, a żaden z moich projektów nie ma jeszcze powodu, żeby to zrobić. Czysty wynik floty mierzy chwilę, nie politykę.
Gdzie naprawdę kończy się oprogramowanie dla Intela
Zmiana w Xcode dotyczy architektur w kompilacji. Koniec oprogramowania dla Intela jako kategorii przypada na macOS 28 i Apple zapisało to zarówno w dokumentacji Rosetty, jak i w informacjach o wydaniu macOS 27 — oba źródła są ze sobą zgodne.
Dokumentacja Rosetty stawia ramy czasowe wprost. Rosetta „została zaprojektowana, aby ułatwić przejście na Apple silicon, i będzie dostępna do macOS 27 włącznie” jako narzędzie ogólnego przeznaczenia dla aplikacji intelowskich, a „poza tym horyzontem zachowamy podzbiór funkcji Rosetty nastawiony na wspieranie starszych, nierozwijanych tytułów gier, które opierają się na frameworkach intelowskich.”7 Informacje o wydaniu macOS 27 podają konsekwencję z tym samym wyjątkiem: „Żadne oprogramowanie oparte na Intelu nie będzie już zgodne z macOS 28.0, z wyłączeniem starszych gier.”10 Dostępne tylko w becie polecenie w innym miejscu tych samych informacji nadaje temu wyjątkowi kształt: sudo game-test-tool enable włącza obsługę starszych gier intelowskich, a Apple ostrzega, że „włączenie obsługi starszych gier wyłącza Rosettę.”15
macOS 27 spędza ten okres na nazywaniu tego, co nie przetrwa. Sekcja Deprecation Information informuje, że „aplikacje oparte na Intelu, które przestaną działać w macOS 28.0, mają teraz odpowiednie oznaczenie w oknie Informacje”, a osobny wpis dodaje, że „Ustawienia > Ogólne wymieniają teraz aplikacje intelowskie, które będą niezgodne z macOS 28.0”, w tym „nieużywane oprogramowanie intelowskie wykryte w systemie.”89
Dla każdego, kto wydaje produkt na Maca, ważniejsze są trzy cichsze wpisy.
Sama Rosetta przestaje się utrzymywać: „Jeśli Rosetta była wcześniej zainstalowana, nie zostaje automatycznie przywrócona po aktualizacji do macOS 27.0.”11 Kontekst dopowiada dokumentacja Apple, zaznaczając, że macOS 27 „bezpośrednio integruje obsługę translacji binariów intelowskich, bez potrzeby instalowania Rosetty”, z myślą o intelowskich binariach Linuksa w maszynach wirtualnych ARM oraz intelowskich kontenerach Linuksa.7 Zmieniają się też aplikacje przypięte przez użytkownika: programy ustawione wcześniej na „Otwórz przy użyciu Rosetty” teraz „uruchamiają się natywnie”, a Apple radzi, żeby „wszelkie dawne problemy ze zgodnością, które wymagały Rosetty, ocenić ponownie na macOS 27.”12
Instalatory zmieniają wartości domyślne: „Pakiety instalacyjne, które nie określają hostArchitecture, będą teraz domyślnie używać arm64”, a Apple prosi, aby „upewnić się, że skrypty pre- i post-install zachowują się zgodnie z oczekiwaniami pod arm64.”11 Każdy produkt na Maca dystrybuowany poza App Store dziedziczy tę zmianę niezależnie od tego, czy jego aplikacja jest Universal.
Najostrzejszą krawędź niosą hosty wtyczek. Apple ostrzega, że „wtyczki i loadery oparte na Intelu mogą nie pojawiać się w Ustawieniach ani nie wywoływać powiadomień o swojej niezgodności”, i wskazuje katalogi do ręcznego sprawdzenia, w tym ~/Library/Audio/Plug-Ins/, ~/Library/Printers/ i ~/Library/ColorPickers/.10 Powód, dla którego wtyczka potrafi unieruchomić skądinąd natywną aplikację, znajduje się w dokumentacji Rosetty: „System uniemożliwia mieszanie kodu arm64 i kodu x86_64 w tym samym procesie. Translacja Rosetty obejmuje cały proces, łącznie ze wszystkimi modułami kodu, które proces ładuje dynamicznie.”7 Intelowska wtyczka wymusza więc translację całego hosta, zamieniając jeden nierozwijany komponent w zależność całej aplikacji od mechanizmu, którego ograniczenie Apple ma już zaplanowane.
Universal istnieje po to, by dosięgnąć Maców z Intelem na macOS od 12 do 27 — to zakres, który tabela zgodności Apple publikuje dla Xcode 27.4 Apple wyznaczyło koniec oprogramowania intelowskiego na macOS 28, a zakresu wdrożeniowego nie ruszyło, więc prawdziwe pytanie zespołu pracującego nad macOS brzmi: ilu jego użytkowników wciąż pracuje na Macu, który tej architektury potrzebuje.
Dwie rzeczy sprawdziłem i nie znalazłem ich śladu: ani informacje o wydaniu Xcode 27, ani te dla macOS 27 nie mówią nic o zmianie wymagań Universal Purchase w Mac App Store, i żadne z nich nie podaje kalendarzowej daty macOS 28.36 Każdą napotkaną datę należy traktować jako domysł.
FAQ
Czy Xcode 27 uniemożliwia wydawanie aplikacji dla Intela?
Nie, a Apple mówi wręcz przeciwnie w tym samym wpisie, w którym uznaje Maki z Intelem za wycofywane maszyny deweloperskie: „SDK macOS 27 obsługuje wsteczne wdrażanie aplikacji Universal (Intel i Apple Silicon) na macOS 12 i nowsze.”2 Tabela zgodności Apple potwierdza zakres, wskazując macOS od 12 do 27 jako deployment targety dla Xcode 27 beta 4.4 Zmienia się wartość domyślna. Target, którego deployment target macOS sięga 27.0, przestaje otrzymywać x86_64 z ARCHS_STANDARD, a podane przez Apple rozwiązanie polega na samodzielnym dodaniu x86_64 do ARCHS.1 Wydawanie wersji dla Intela staje się wyborem, który trzeba zadeklarować, a nie takim, który się dziedziczy.
Czy kompilacja się nie powiedzie, jeśli ARCHS_STANDARD porzuci x86_64?
Nic we wpisie Apple nie opisuje błędu, ostrzeżenia ani jakiejkolwiek diagnostyki. Apple opisuje zmianę wartości domyślnej: targety na macOS lub DriverKit 27.0 i wyżej „nie będą domyślnie budowane jako Universal.”1 Kompilacja, która kompiluje się, linkuje i podpisuje z jedną architekturą zamiast dwóch, jest kompilacją poprawną, a na Macu z Apple silicon, którego Xcode 27 wymaga, różnica pozostaje w czasie działania niewidoczna.2 Apple podaje wartość domyślną i zostawia konsekwencję niedopowiedzianą, więc słowo „cicha” jest moje, nie Apple. Zamiast czekać, aż temat podniesie log kompilacji, warto sprawdzić lipo -archs na zarchiwizowanej binarce.
Czy nowe zachowanie da się przetestować na Xcode 26?
Nie. Sprawdziłem to bezpośrednio na Xcode 26.6 (build 17F113): nadpisanie MACOSX_DEPLOYMENT_TARGET na 27.0 w projekcie przeznaczonym wyłącznie na macOS nadal rozwiązuje ARCHS_STANDARD = arm64 x86_64, identycznie jak to samo polecenie przy 26.0.13 Poprzedni toolchain nie implementuje progu, więc żadne eksperymenty z ustawieniami kompilacji na Xcode 26 nie pokażą tej zmiany z wyprzedzeniem. Xcode 26.6 odtwarza natomiast sam zakres: ten sam projekt rozwiązuje ARCHS_STANDARD = arm64 względem SDK dla iOS i arm64 x86_64 względem SDK dla macOS, co pasuje do wpisu wymieniającego deployment targety macOS i DriverKit i nic poza nimi.113
Czy potrzebny jest teraz Mac z Apple silicon?
Do uruchomienia Xcode 27 tak, bez żadnych zastrzeżeń: „Xcode 27 będzie się instalować i działać wyłącznie na Macach z Apple silicon.”2 Apple dokłada do wymogu sprzętowego programowy, wymagając macOS Tahoe 26.4 lub nowszego dla Xcode 27 beta 4.4 Programowanie pod Intela przetrwa na starszych toolchainach — tak formułuje to Apple: „Programowanie pod Intela jest nadal możliwe na wersjach macOS, które obsługują Rosettę, takich jak macOS 27.”2 Dokumentacja Rosetty stawia tej drodze granicę, stwierdzając, że Rosetta „będzie dostępna do macOS 27 włącznie” jako narzędzie ogólnego przeznaczenia, a później w ograniczonym podzbiorze nastawionym na starsze, nierozwijane gry.7
Najważniejsze wnioski
Dla twórców aplikacji na macOS:
- Audyt należy zacząć bez flagi -sdk, czytać SUPPORTED_PLATFORMS i SDKROOT razem, a MACOSX_DEPLOYMENT_TARGET zignorować przy pytaniu, czy target w ogóle buduje się dla macOS. Xcode wpisuje deployment target macOS także do projektów przeznaczonych wyłącznie na iOS: trzy moje go raportują (26.5, 26.5 i 26.2), nie budując się na żadnego Maca.14
- Targety trzeba wyliczyć poleceniem xcodebuild -list, zanim rozwiąże się ustawienia. Zapytanie na poziomie projektu w moim rozszerzeniu do Safari pokazało projekt wyłącznie iOS-owy i ukryło dwa targety macOS.14
Dla zespołów, wśród których użytkowników są Maki z Intelem:
- O x86_64 warto decydować jawnie, zamiast je dziedziczyć. Podnosząc deployment target macOS do 27.0, należy ustawić ARCHS, bo wpis Apple oferuje dokładnie takie rozwiązanie i żadnego ostrzeżenia, gdy się je pominie.1
- Weryfikować trzeba poleceniem lipo -archs na zarchiwizowanej binarce — nie na ustawieniach kompilacji i nie na pliku Info.plist archiwum. Dwa moje archiwa nie mają w ogóle metadanych o architekturze, choć ich binarki są Universal.14
Dla osób odpowiedzialnych za wydania: - Termin sprzętowy trzeba oddzielić od terminu wydawniczego. Xcode 27 wymaga Maca z Apple silicon od pierwszego dnia; wynik Universal nadal sięga macOS 12 i nowszych, a Apple nie opublikowało kalendarzowej daty macOS 28.24 - Inwentaryzacja powinna objąć intelowskie wtyczki i pakiety instalacyjne, nie tylko aplikacje. Apple ostrzega, że wtyczki intelowskie „mogą nie pojawiać się w Ustawieniach”, a taka wtyczka wymusza translację całego procesu hosta.710
Cykl 27 wciąż ukrywa doniosłe zmiany w miejscach niepozornych. Usunięcie linkera i reguła nazw modułów łamią kompilacje wprost przy aktualizacji toolchainu, makro @State łamie je na poziomie kodu źródłowego, a klucz ekranu startowego blokuje wysyłkę aplikacji. Domyślna zmiana dotycząca Intela nie łamie niczego, a mimo to zmienia produkt — i właśnie dlatego warto ją zbadać przed aktualizacją, a nie po niej. Całość zbiera Seria o ekosystemie Apple.
Źródła
-
Apple, Xcode 27 Release Notes, sekcja Intel Deprecation, New Features in Xcode 27 Beta (radar 161837535). Cytowane dosłownie i w całości w treści tego artykułu; oryginał: „Build targets with a min deployment target set to macOS 27.0 or DriverKit 27.0 will not build Universal by default. The
ARCHS_STANDARDbuild setting will no longer include x86_64 whenMACOSX_DEPLOYMENT_TARGETorDRIVERKIT_DEPLOYMENT_TARGET>= 27.0. The x86_64 architecture can be added to theARCHSbuild setting if this is needed.” Odnotowane jako umieszczone w New Features, a nie w Deprecations. Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku, ponieważ strona HTML renderuje swoją treść przez JavaScript. Tytuł strony na ten dzień brzmi „Xcode 27 Beta 4 Release Notes”. ↩↩↩↩↩↩↩↩↩ -
Apple, Xcode 27 Release Notes, sekcja Intel Deprecation, Deprecations in Xcode 27 Beta (radar 162138432). Cytowane dosłownie i w całości; oryginał: „Xcode 27 will only install and run on Apple silicon Macs. The macOS 27 SDK supports back deploying Universal (Intel and Apple Silicon) apps to macOS 12 and later. Intel development is still possible with macOS versions that support Rosetta like macOS 27.” Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku. ↩↩↩↩↩↩↩↩↩↩↩
-
Apple, Xcode 27 Release Notes, Overview: „Xcode 27 beta 4 includes Swift 6.4 and SDKs for iOS 27, iPadOS 27, tvOS 27, watchOS 27, macOS 27, and visionOS 27. Xcode 27 beta 4 supports on-device debugging in iOS 17 and later, tvOS 17 and later, watchOS 10 and later, and visionOS. Xcode 27 beta 4 requires a Mac running macOS Tahoe 26.4 or later.” Cytowane również jako wynik negatywny: przeszukanie pełnych informacji o wydaniu 26 lipca 2026 roku pod kątem „Universal Purchase” oraz jakiegokolwiek wymagania dystrybucyjnego App Store powiązanego z architekturą nie dało nic, a jedyne pozostałe wystąpienia słowa „Universal” w dokumencie to „Universal Clipboard” w poprawce dotyczącej Device Hub oraz same wpisy sekcji Intel Deprecation. ↩↩
-
Apple, Xcode Support: SDKs and system requirements. Źródło porównywanych tu wierszy tabeli zgodności. Xcode 27 beta 4: obsługiwany macOS „macOS Tahoe 26.4 or later”, deployment targety „macOS 12-27” i „DriverKit 21-27”, Swift 6.4. Xcode 26.6: obsługiwany macOS „macOS Tahoe 26.2 - macOS Tahoe 26.x”, deployment targety „macOS 11-26.5” i „DriverKit 20-25.5”, Swift 6.3. Pobrano 26 lipca 2026 roku. ↩↩↩↩↩↩
-
Apple, Build settings reference, dokumentacja Xcode. Źródło opisu
ARCHS(„A list of the architectures for which the product will be built. This is usually set to a predefined build setting provided by the platform. If more than one architecture is specified, a universal binary will be produced.”), opisuEXCLUDED_ARCHS(„A list of architectures for which the target should not be built. These architectures will be removed from the list inARCHSwhen the target is built.”) oraz wpisuENABLE_POINTER_AUTHENTICATION, który dokumentuje wykorzystaną tu zależność: uwierzytelnianie wskaźników „Adds an additional architectural slice (arm64e) with pointer authentication instructions toARCHS_STANDARD. Has no effect ifARCHShas been overridden to not be based onARCHS_STANDARD.” Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku. ↩↩ -
Apple, macOS 27 Release Notes. Tytuł strony w chwili pobrania: „macOS 27 Golden Gate Beta 4 Release Notes”. Cytowane tu ze względu na status bety dokumentu oraz jako wynik negatywny: przeszukanie pełnych informacji o wydaniu 26 lipca 2026 roku pod kątem „Universal Purchase” oraz jakiegokolwiek wymagania architektonicznego Mac App Store nie dało nic, a same informacje nie podają kalendarzowej daty macOS 28. Zweryfikowane względem JSON dokumentacji Apple. ↩↩
-
Apple, About the Rosetta translation environment, dokumentacja Apple silicon. Źródło ram czasowych, cytowane dosłownie z pierwszej ramki Important w sekcji Overview: „Rosetta was designed to make the transition to Apple silicon easier, and will be available through macOS 27 — as a general-purpose tool for Intel apps to help developers complete the migration of their apps. Beyond this timeframe, we will keep a subset of Rosetta functionality aimed at supporting older unmaintained gaming titles, that rely on Intel-based frameworks.” Ta sama ramka jest źródłem zdania „macOS 27 directly integrates support for Intel binary translation, without needing to install Rosetta. This enables support for Intel Linux binaries running in ARM virtual machines (VMs) as well as Intel Linux containers.” Druga ramka Important jest źródłem zdania „The system prevents you from mixing
arm64code andx86_64code in the same process. Rosetta translation applies to an entire process, including all code modules that the process loads dynamically.” Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku. W treści artykułu zdanie o ramach czasowych występuje rozdzielone na dwa cytowane fragmenty, aby nie odtwarzać myślnika Apple; żadne słowo między nimi nie zostało zmienione ani pominięte. ↩↩↩↩↩ -
Apple, macOS 27 Release Notes, sekcja Deprecation Information, New Features (radar 169548657): „Intel-based applications that will no longer run in macOS 28.0 now display a treatment in Get Info.” Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku. ↩
-
Apple, macOS 27 Release Notes, sekcja EcosystemUI, New Features (radar 175697313): „Settings > General now lists Intel-based apps that will be incompatible with macOS 28.0. The list also identifies unused Intel-based software discovered on the system. The system might suggest a website where an Apple silicon native version can be found for a listed app.” Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku. ↩
-
Apple, macOS 27 Release Notes, sekcja Rosetta, Deprecations (radar 176042635), cytowane w całości: „Intel-based plugins and loaders may not appear in Settings or trigger notifications of their incompatibility. All Intel-based software will no longer be compatible with macOS 28.0, excluding legacy games. Check common plugin locations for VSTs, HAL, ARA, PDEs, Color Pickers, Quicklook & Spotlight plugins/extensions/components, such as: ~/Library/Audio/Plug-Ins/* ~/Library/Printers/ ~/Library/ColorPickers/” Odnotowane, ponieważ zastrzeżenie „excluding legacy games” bywa pomijane w relacjach wtórnych, a samo zdanie pojawia się wyłącznie pod tym radarem, a nie w kilku radarach dotyczących Intela, którym bywa przypisywane. Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku. ↩↩↩↩
-
Apple, macOS 27 Release Notes, sekcja Rosetta, Deprecations. Źródło radaru 163213094: „If Rosetta was previously installed, it is not automatically restored after upgrading to macOS 27.0” oraz radaru 171187112: „Installer packages which specify no
hostArchitecturewill now default to arm64. Ensure any pre and post install scripts behave as intended under arm64. Additionally, audit any remaining installer plugins to ensure compatibility on Apple silicon.” Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku. ↩↩ -
Apple, macOS 27 Release Notes, sekcja Rosetta, New Features (radar 168097174): „On launch, Applications previously set to ‘Open using Rosetta’ by a user will have the application launch natively. Any compatibility issues requiring Rosetta from the past should be re-assessed on macOS 27.” Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku. ↩
-
Testy autora na macOS 26.5.2 (build 25F84) z Xcode 26.6 (build 17F113), 26 lipca 2026 roku. Wyjście poleceń odtworzone dosłownie. W projekcie Cels (
SDKROOT = macosx,MACOSX_DEPLOYMENT_TARGET = 26.0) poleceniexcodebuild -showBuildSettings -configuration Release -sdk macosxrozwiązujeARCHS = arm64 x86_64orazARCHS_STANDARD = arm64 x86_64; dodanie w wierszu poleceń nadpisaniaMACOSX_DEPLOYMENT_TARGET=27.0zwraca identyczne wiersze z architekturami przyMACOSX_DEPLOYMENT_TARGET = 27.0, a jawne nadpisanie do 26.0 zwraca to samo. Zakres platformowy sprawdzono na projekcie Reps:-sdk iphoneosrozwiązujeARCHS = arm64iARCHS_STANDARD = arm64, natomiast-sdk macosxrozwiązujearm64 x86_64w obu przypadkach. Xcode 27 nie był zainstalowany na użytej maszynie i w tym artykule nie pojawia się nigdzie wyjście z Xcode 27. Ponieważ Xcode 27 wymaga Maca z Apple silicon oraz macOS Tahoe 26.4 lub nowszego, zmienionej wartości domyślnej nie da się na tym toolchainie w ogóle zaobserwować; wynik z 26.6 dowodzi jedynie, że poprzedni toolchain nie implementuje progu. ↩↩↩↩↩↩↩ -
Audyt autora obejmujący 11 projektów Xcode na macOS 26.5.2 z Xcode 26.6 (build 17F113), 26 lipca 2026 roku: Reps, Return, Banana List, Ace Citizenship, Water, ResumeGeni, Yawara, Cels, Shikigami, ResumeGeni for Safari i Tile. Targety wyliczono poleceniem
xcodebuild -list -project, a każdy rozwiązano osobno poleceniemxcodebuild -showBuildSettings -project ... -target ... -configuration Release. Sumy: 44 targety, z czego 21 rozwiązuje wartośćSUPPORTED_PLATFORMSzawierającąmacosx, w ośmiu projektach. Deployment targety macOS wśród tych 21: 26.0 (10 targetów), 26.1 (trzy), 26.2 (dwa), 26.5 (trzy), 15.0 (jeden), 13.0 (dwa); maksimum to 26.5 i żaden nie sięga 27.0.grep -cE "^[[:space:]]*ARCHS[[:space:]]*="oraz analogiczne wyszukanieEXCLUDED_ARCHSzwracają zero dla wszystkich 11 plikówproject.pbxproj, afindnie znajduje żadnego pliku.xcconfigw drzewach tych 11 projektów. Sześć z 21 targetów macOS ma konkretnySDKROOTi rozwiązujeARCHS_STANDARD = arm64 x86_64bez flagi-sdk; pozostałych 15 maSDKROOT = autoi nie rozwiązuje wierszaARCHS_STANDARD, dopóki nie poda się-sdk macosx, po czym ich projekty rozwiązująarm64 x86_64. Obie pułapki audytu potwierdzono bezpośrednio. Shikigami, któregoproject.pbxprojustawiaSDKROOT = iphoneosi nie ustawiaSUPPORTED_PLATFORMS, rozwiązujeSUPPORTED_PLATFORMS = iphoneos iphonesimulatoriARCHS_STANDARD = arm64bez flagi-sdk, ale raportujeSUPPORTED_PLATFORMS = macosxiARCHS_STANDARD = arm64 x86_64, gdy poda się-sdk macosx; Ace Citizenship, który jawnie deklarujeSUPPORTED_PLATFORMS = "iphoneos iphonesimulator", zachowuje pod tą samą flagą swoją prawdziwą wartość, więc artefakt pojawia się wyłącznie tam, gdzie projekt pomija to ustawienie. ResumeGeniForSafari rozwiązuje na poziomie projektuSUPPORTED_PLATFORMS = iphoneos iphonesimulatoriARCHS_STANDARD = arm64, podczas gdyxcodebuild -listraportuje cztery targety, z którychResumeGeniForSafari-macOSiResumeGeniForSafariExtension-macOSrozwiązująSUPPORTED_PLATFORMS = macosxiARCHS_STANDARD = arm64 x86_64. Cels deklarujeSDKROOT = macosxprzy zerowej liczbie wierszySUPPORTED_PLATFORMSw swoimproject.pbxproj, więc tekstowe przeszukanie plików projektu pod kątemSUPPORTED_PLATFORMScałkowicie go pomija. Ace Citizenship, ResumeGeni i Shikigami raportująMACOSX_DEPLOYMENT_TARGET(odpowiednio 26.5, 26.2 i 26.5), nie budując się na żadnego Maca. Dane o archiwach pochodzą zlipo -archsuruchomionego na głównym pliku wykonywalnym w każdym.xcarchivew katalogu~/Library/Developer/Xcode/Archives— 79 archiwów datowanych od 16 kwietnia do 16 lipca 2026 roku: 51 archiwów macOS obejmujących siedem różnych produktów (941 Tiles, Banana List, Cels, LearnMateria, ResumeGeni for Safari, Return i Tile) raportujex86_64 arm64, a wszystkie 28 archiwów z rodziny iOS raportujearm64. Oba archiwa Cels nie zawierają w plikuInfo.plistarchiwum listy architekturApplicationProperties, więcplutil -extract ApplicationProperties.Architecturesnie zwraca dla nich nic, podczas gdylipona binarce zwracax86_64 arm64;LC_BUILD_VERSIONdla poszczególnych architektur w tej binarce raportujeminos 26.0isdk 26.5dla obu. Water i Yawara nie mają na dysku ani archiwum macOS, ani zbudowanego produktu macOS, więc ich wiersze opierają się wyłącznie na rozwiązanych ustawieniach kompilacji. Audyt obejmuje wyłącznie bieżące drzewa robocze i lokalny katalog archiwów, nie historię gita ani wyjście CI. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, macOS 27 Release Notes, sekcja Gaming, New Features (radar 166398727), cytowane w całości: „A new command line tool lets you enable support for legacy Intel-based games during beta releases. To enable it, run the following command in Terminal:
sudo game-test-tool enable. Restart your Mac computer for the change to take effect. Once enabled, games run transparently through the new underlying system behavior. Note that enabling legacy game support disables Rosetta, non-game processes might crash or behave unexpectedly, and this feature is intended only for playing legacy Intel-based games and is not available outside of macOS beta releases.” Cytowane jako jedyne miejsce w obu dokumentach z informacjami o wydaniu, które opisuje, jak wyjątek „excluding legacy games” zachowuje się w praktyce. Zweryfikowane względem JSON dokumentacji Apple 26 lipca 2026 roku. ↩