Push, domínios associados, keychain e modos de background - configurando entitlements do iOS através de app.config.ts e plugins de configuração para que o Expo prebuild escreva o arquivo .entitlements correto antes do EAS Build ou TestFlight.
import * as SecureStore from "expo-secure-store";await SecureStore.setItemAsync("refresh_token", token, { keychainAccessible: SecureStore.WHEN_UNLOCKED, // accessGroup: "group.com.example.shopapp", // quando a extensão precisa ler o mesmo segredo});
Os identificadores de app group devem corresponder entre o app principal e as extensões (widgets).
O compartilhamento do Keychain requer um grupo de acesso idêntico em ambos os entitlements dos targets.
Entitlements são pares chave-valor em YourApp.entitlements que a Apple assina digitalmente no IPA. Eles controlam o acesso a APIs:
<!-- Trecho gerado - não edite manualmente sob CNG --><key>com.apple.developer.associated-domains</key><array> <string>applinks:shop.example.com</string></array><key>aps-environment</key><string>development</string> <!-- production em builds da App Store -->
// Prefira campos de configuração de alto nível quando o Expo os documentarios: { associatedDomains: ["applinks:example.com"] }// Use ios.entitlements para chaves sem campos de primeira classeios: { entitlements: { "com.apple.developer.networking.networkextension": ["app-proxy-provider"], },}// Ou um plugin de configuração local com withEntitlementsPlist
Veja Config Plugins - withEntitlementsPlist é a saída de emergência.
Esperar que OTA adicione push ou domínios - entitlements são nativos. Correção: novo eas build.
UIBackgroundModes sem implementação - rejeição da Diretriz 2.5.4. Correção: remover modos não utilizados.
Expo Go para QA de link universal - bundle ID incorreto. Correção: dev client com seu bundleIdentifier.
Widget lê keychain mas sem app group - a extensão não consegue ver os dados do app principal. Correção: identificadores group. correspondentes - veja App Extensions & Widgets.
eas build executa o prebuild (a menos que ios/ seja commitado) e assina com credenciais que correspondem às capacidades do App ID habilitadas no portal do Apple Developer.
A capacidade do portal deve estar LIGADA E a configuração deve declarar o entitlement.
E quanto ao iCloud ou HealthKit?
Habilite no portal do Apple Developer, adicione o entitlement via plugin de configuração, forneça notas de Revisão e justificativa de uso.