O FitStreak é um app de hábito de treino para iPhone e Apple Watch, desenvolvido em React Native com Expo. No entanto, o widget da tela inicial e o app do Apple Watch são targets nativos em Swift. Esses módulos compartilham dados com o app por App Groups e via WatchConnectivity. Problemas de registro de módulos nativos podem causar problemas sem erros visíveis, como a falta de dados no relógio Apple Watch.

Pitch: o módulo nativo que compilava em todo build e nunca era registrado (Expo + widget + Apple Watch)

Problema

Durante várias versões do projeto, o widget e o relógio Apple Watch simplesmente não recebiam dados do app. Os testes de validação da App Store e a assinatura passaram sem problemas, mas o módulo não era registrado no ExpoModulesProvider.swift. Como resultado, a chamada requireNativeModule('WidgetData') falhava em todos os launches reais.

Solução

A solução encontrada foi adicionar a linha apple.podspecPath no arquivo expo-module.config.json. Isso fornece o caminho do podspec para o módulo, garantindo que o Expo_MODULES_PROVIDER seja capaz de localizar e registrar o módulo.

Teste

Um teste foi implementado que verifica a funcionalidade do resolver de módulos, garantindo que o módulo seja registrado antes de qualquer chamada de módulo.

Conclusão

Registrar módulos nativos em Expo é crucial para apps que usam widgets e relógios Apple Watch. O FitStreak é um exemplo de um app que pode beneficiar de uma solução de registro de módulos nativos para garantir a integração perfeita entre o app e os dispositivos externos.

Feedback Solicitado

Obrigado por compartilhar seu problema e solução. Estamos interessados em feedback sobre o onboarding do FitStreak e como podemos melhorar a experiência do usuário. Se você tiver sugestões ou feedback sobre o onboarding, por favor, compartilhe-os.

AppleNativoPitchWatchWidget