{"id":46775393,"url":"https://github.com/davigomesflorencio/challenge_ionic","last_synced_at":"2026-03-09T23:43:06.304Z","repository":{"id":125304377,"uuid":"252707529","full_name":"davigomesflorencio/challenge_ionic","owner":"davigomesflorencio","description":"Aplicativo de demonstração Ionic + Angular + Capacitor com integração ao Firebase (Firestore).","archived":false,"fork":false,"pushed_at":"2026-02-11T18:01:28.000Z","size":389,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-12T02:50:46.640Z","etag":null,"topics":["angular","firebase","firestore","ionic","typescript"],"latest_commit_sha":null,"homepage":"https://davigomesflorencio.com.br/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davigomesflorencio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-04-03T11:03:06.000Z","updated_at":"2026-02-11T18:02:08.000Z","dependencies_parsed_at":"2023-08-11T00:15:33.116Z","dependency_job_id":null,"html_url":"https://github.com/davigomesflorencio/challenge_ionic","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/davigomesflorencio/challenge_ionic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davigomesflorencio%2Fchallenge_ionic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davigomesflorencio%2Fchallenge_ionic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davigomesflorencio%2Fchallenge_ionic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davigomesflorencio%2Fchallenge_ionic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davigomesflorencio","download_url":"https://codeload.github.com/davigomesflorencio/challenge_ionic/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davigomesflorencio%2Fchallenge_ionic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30316776,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T20:05:46.299Z","status":"ssl_error","status_checked_at":"2026-03-09T19:57:04.425Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","firebase","firestore","ionic","typescript"],"created_at":"2026-03-09T23:43:05.648Z","updated_at":"2026-03-09T23:43:06.285Z","avatar_url":"https://github.com/davigomesflorencio.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv\u003e\n\u003cimg src=\"./screenshots/0.jpeg\" alt=\"drawing\" style=\"width:auto;\"/\u003e\n\u003c/div\u003e\n\n# Challenge Ionic V2\n\nAplicativo de demonstração Ionic + Angular + Capacitor com integração ao Firebase (Firestore).\n\n**Resumo**\n\n- App: formulário simples que salva dados no Firestore e captura geolocalização.\n- Tecnologias: Ionic 8 / Angular 20 / Capacitor 8 / @angular/fire + Firebase v12+\n\n**Pré-requisitos**\n\n- Node.js \u003e= 18\n- npm ou pnpm\n- Ionic CLI: `npm i -g @ionic/cli`\n- Capacitor CLI: já incluído nas devDependencies (`@capacitor/cli`)\n- Java JDK (recomendado Java 17 ou 21). Atenção: JDKs muito novos (ex.: 25) podem causar incompatibilidades com versões do Gradle.\n- Android Studio (para emulador / build Android)\n- Xcode (para iOS, macOS)\n- CocoaPods (`sudo gem install cocoapods`) — _Opcional se usar SPM (Swift Package Manager)_, mas recomendado para plugins legados.\n\n**Instalação local**\n\n- Instale dependências: `npm install`\n- Configure Firebase: abra [src/environments/environment.ts](src/environments/environment.ts) e atualize o bloco `firebase` com suas credenciais do projeto Firebase.\n\n**Rodando em desenvolvimento (web)**\n\n- `ionic serve` — roda no navegador\n\n**iOS (Configuração e Build)**\n\nO projeto está configurado para usar **Swift Package Manager (SPM)** como gerenciador de dependências nativas (Capacitor 8+).\n\n1.  **Sincronizar**: `npx cap sync ios`\n2.  **Abrir no Xcode**: `npx cap open ios`\n3.  **Configurações Importantes**:\n    - No Xcode, vá em **Signing \u0026 Capabilities** e selecione seu \"Team\" para possibilitar o build em dispositivos físicos.\n    - O `Info.plist` já contém as chaves necessárias para geolocalização:\n      - `NSLocationAlwaysUsageDescription`\n      - `NSLocationWhenInUseUsageDescription`\n4.  **Executar**:\n    - Via CLI: `npx cap run ios`\n    - Pelo Xcode: Botão **Play** (Cmd+R) após selecionar o simulador ou dispositivo.\n\n**Android (Configuração e Build)**\n\n1.  **Sincronizar**: `npx cap sync android`\n2.  **Abrir no Android Studio**: `npx cap open android`\n3.  **Executar**: `npx cap run android` ou via Android Studio.\n\n**Build (produção)**\n\n- `npm run build` (gera `www`) \u0026\u0026 `npx cap sync android` \u0026\u0026 então build via Android Studio / Xcode\n\n**Firebase / Firestore**\n\n- Este projeto usa `@angular/fire` + Firebase modular (v9+). O módulo é inicializado em `src/app/app.module.ts`.\n- Serviço de exemplo: `src/app/services/desafio.ts` — usa injeção do `Firestore` e funções `collection`, `addDoc`, `updateDoc`.\n\n**Configurações Capacitor (CORS / WebView)**\n\n- Se a WebView bloquear requisições ao Firestore (erro `net::ERR_BLOCKED_BY_CLIENT`), atualize `capacitor.config.ts` adicionando hosts do Firebase em `server.allowNavigation` e sincronize: `npx cap sync`.\n\n**Problemas comuns e correções aplicadas**\n\n- `ion-app` não é conhecido: adicione `CUSTOM_ELEMENTS_SCHEMA` em `src/app/app.module.ts` (já aplicado).\n- `Can't bind to 'formGroup'`: importe `ReactiveFormsModule` no módulo da página (ex.: `src/app/home/home.module.ts`).\n- Erros `TS4111` (index signature): no template use `fields['nome'].errors['required']` em vez de `fields.nome.errors.required`.\n- Import de `ToastController` incorreta: use `import { ToastController } from '@ionic/angular';`.\n- `Firebase API called outside injection context`: certifique-se de definir `provideFirebaseApp` e `provideFirestore` em `imports` de `AppModule` e usar injeção (ou `inject()`), como feito em `src/app/services/desafio.ts`.\n- Erro Gradle / Java (`Unsupported class file major version 69`): ajuste sua JDK para uma versão suportada pelo Gradle ou defina `org.gradle.java.home` em `android/gradle.properties` apontando para a JDK desejada.\n\n**Comandos úteis**\n\n- `npm install`\n- `ionic serve`\n- `npx cap sync`\n- `npx cap run android`\n- `npx cap open android`\n- `npm run build`\n- `npm test`\n\n**Continuação / Contribuição**\n\n- Se quiser, eu posso: rodar e ajustar scripts de build, preparar workflow CI, adicionar validação / testes de ponta a ponta, ou preparar o deploy no Firebase Hosting.\n\n---\n\nGerado automaticamente — instruções e correções básicas incluídas para facilitar o build e execução do app.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavigomesflorencio%2Fchallenge_ionic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavigomesflorencio%2Fchallenge_ionic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavigomesflorencio%2Fchallenge_ionic/lists"}