Cloud Firestore not working only on iOS | Flutter - xcode

I tried to add to my flutter app services like firebase and Firestore.
I've already done this on windows, now I am on Mac.
I followed the official guide at this link
When I build the android app it works fine, but on iOS I keep getting errors like this
How can I fix this?
Already tried to disable 'Use map Header' option, and to boot on legacy emulator.

I have the following configuration for Firestore in iOS:
pubspec.yaml
firebase_core: ^0.4.1+3
cloud_firestore: ^0.12.10
# other dependencies
execute the following command:
flutter pub get
Download the GoogleService-Info.plist file, and copy it to the path nameApp/ios/Runner
Update Firebase with the command: pod update Firebase
NOTE: at some point in a project I had problems with firestore and what I had to do was the following, execute command flutter clean
in the following link it can be a video on youtube where they make an explanation of the firebase configuration for iOS link

Related

Azure pipeline is using cached version of Flutter webview package

Local specs:
MacOS v13.0.1
xCode 14.1
I've a flutter project that uses Flutter InAppWebview package
flutter_inappwebview: ^5.7.1
, and its working as expected, but when I'm trying to build the project using Azure pipeline, I get this error:
Swift Compiler Error (Xcode): Cannot call value of non-function type 'String?'
/Users/runner/hostedtoolcache/Flutter/3.3.8/macos/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.7.1+2/ios/Classes/MyCookieManager.swift:293:43
As you can see, the pipeline is using another version from flutter_inappwebview package which is 5.7.1+2 !
Any idea why or how I can reset this .pub-cache on the azure pipeline?
In a similar question on how to clear the .pub-cache folder for flutter #CopsOnRoad's answer explains flutter has the following command for clearing the cache.
flutter pub cache clean
Run this command in a task before starting the actual build.

How to eject expo project to native code

I eject project from expo with command npm run eject. It generates 2 folders ios and android. I tried to run the project by xcode but it still display this error. Maybe I'm not clear how to run project after eject, can you help me run it.
I run some statements to install pod, but cannot work https://github.com/CocoaPods/CocoaPods/issues/2303
So with ejecting, you should have been presented with two options:
? How would you like to eject from create-react-native-app? (Use arrow keys)
❯ React Native: I'd like a regular React Native project.
ExpoKit: I'll create or log in with an Expo account to use React Native and the Expo SDK.
Cancel: I'll continue with my current project structure.
If you chose the first (React Native), then there should have been no issues with opening up your Xcode project and running the app (there would also be no pods to install). Since your error and comment indicates otherwise, I can presume that you chose option 2: Expokit.
For that, you should have been prompted with something about making an Expo account or using an existing one:
? How would you like to eject from create-react-native-app?
React Native: I'd like a regular React Native project.
❯ ExpoKit: I'll create or log in with an Expo account to use React Native and the Expo SDK.
Cancel: I'll continue with my current project structure.
An Expo account is required to proceed.
? It appears you're already logged in to Expo as ...
After that, you'll need to follow the steps in Developing With ExpoKit. Specifically to get iOS running, you need follow all of the steps in this section after running npm run eject.
If you've done all of that, then it should work fine when running in conjunction with Expo XDE or exp. I've just tested both right now and it works without error. Double check your steps to make sure you didn't miss something. Otherwise, please edit your question with more details on exactly what commands you ran, what other dependencies you have, etc. as I'm unable to reproduce the error you have.
If you want to download new project without expo then try run:
react-native init ProjectNameHere
or , If you want to convert your own project without expo then try :
1. rm -rf node_modules
2. remove expo dependencies from package.json
3. npm install
4. react-native upgrade
(Note:This following step will create new ios and android folder and you have to redo the dependencies. I was struggling with the same issue so I posted my solution)

Phonegap Build is failing due to dependency error

Im building the Phonegap App using Phonegap Build.
Phonegap Build cant create Android APK, build is failing with below error, Morning I was able to create the APK but now below error is thrown. Note that there is no config file changes between morning and now.
Please help
App Id: 2074580
https://build.phonegap.com/apps/2074580/builds
Could not resolve all dependencies for configuration ':_debugCompile'.
Could not find com.android.support:support-v4:23.4.0.
Searched in the following locations:
https://repo1.maven.org/maven2/com/android/support/support-v4/23.4.0/support-v4-23.4.0.pom
https://repo1.maven.org/maven2/com/android/support/support-v4/23.4.0/support-v4-23.4.0.jar
file:/android-sdk/extras/android/m2repository/com/android/support/support-v4/23.4.0/suppo rt-v4-23.4.0.pom
file:/android-sdk/extras/android/m2repository/com/android/support/support-v4/23.4.0/suppo rt-v4-23.4.0.jar
file:/android-sdk/extras/google/m2repository/com/android/support/support-v4/23.4.0/suppor t-v4-23.4.0.pom
file:/android-sdk/extras/google/m2repository/com/android/support/support-v4/23.4.0/suppor t-v4-23.4.0.jar
Required by:
:project:unspecified
I had a similar problem with this plugin. I needed to update some android libraries. This command solved it all for me:
android update sdk --no-ui --all --filter "extra-android-m2repository"
If you don't have the android command in your command line, you can navigate to the SDK directory.
Answered here; https://github.com/phonegap/phonegap-plugin-push/issues/928. You need to switch back to Cordova version 1.6.3 or 1.6.4. But I just checked and upgrading to the latest nightly build also seems to fix it. When working in Visual Studio, clear the cordova cache too (after setting the correct version):
Tools => Options => Tools for Apache Cordova => Clear Cordova Cache.

How do I build a Pebble.js project from the command line tools?

I created a new Pebble.js project in the CloudPebble editor, and I can successfully build it and push it to my watch from there. The problem arises when I try and build/install it from the command line, with the pebble build command returning this:
[ERROR ] The Pebble project directory is using an outdated version of the SDK!
[ERROR ] Try running `pebble convert-project` to update the project
And the pebble convert-project command returning:
[ERROR ] Could not find usage of PBL_APP_INFO
Now I know for a fact that I have a working Pebble project here, and this is the exact code which the CloudPebble editor created; so how am I supposed to use the SDK then?
To compile a Pebble.js project with the Pebble SDK on your computer you need to follow these steps:
Fork the official Pebble.js repository from Github. This is a valid Pebble project
Replace the JS code in src/js/app.js with your code. If you have multiple files, you can add them in that folder too. You should not touch main.js or loader.js. Leave them here.
Compile the project just like you would compile any Pebble project (pebble build)
Hope this helps!

Trouble packaging and signing iOS apps built with Cordova CLI

Until now, all of my experience compiling PhoneGap apps has been via the excellent PhoneGap:Build service. However, I now find myself in a situation where I need to compile locally, because I need to use a plugin that includes a binary file, which precludes it from being included for use with PG:B.
So for these reasons, I need to compile locally. "Great!" I thought, I'll just use the new CLI...
I have developed my app, and I can test it on-device via deploy over USB from Xcode, but trying to get a release build, and sign it, with the provisioning profile embedded, has been a nightmare.
For completeness, this is the basic outline of everything I've done, aside from the app development itself.
$ pwd
/users/adam/dev/myapp/mobile/
$ cordova create build_local com.foo.bar MyApp
Creating a new cordova project with name "MyApp" and id "com.foo.bar" at location "/Users/adam/DEV/myapp/build_local"
$ cd build_local
$ cordova platform add ios
Creating ios project...
$ cordova platform add android
Creating android project...
Creating Cordova project for the Android platform:
Path: platforms/android
Package: com.foo.bar
Name: MyApp
Android target: android-19
Copying template files...
<snip>
Project successfully created.
$ cordova plugin add https://github.com/hazemhagrass/BackgroundJS
Fetching plugin "https://github.com/hazemhagrass/BackgroundJS" via git clone
Installing com.badrit.BackgroundJS (android)
Fetching plugin "https://github.com/apache/cordova-plugin-device.git" via git clone
Installing org.apache.cordova.device (android)
Installing com.badrit.BackgroundJS (ios)
Installing org.apache.cordova.device (ios)
$ cordova plugin add de.appplant.cordova.plugin.local-notification
Fetching plugin "de.appplant.cordova.plugin.local-notification" via plugin registry
Installing de.appplant.cordova.plugin.local-notification (android)
Installing de.appplant.cordova.plugin.local-notification (ios)
$ cordova plugin add https://github.com/kdzwinel/phonegap-estimotebeacons
Fetching plugin "https://github.com/kdzwinel/phonegap-estimotebeacons" via git clone
Installing pl.makingwaves.estimotebeacons (android)
Installing pl.makingwaves.estimotebeacons (ios)
For what it's worth, this last plugin is the reason that I have to compile locally.
Now, here's one other potential monkey wrench: This app is actually two apps. It's the same core codebase, merged into two different deployment branches of the repo, one for each client. So each app will have its own id, name, and config stuff. Because of this, I actually have more than one cordova project folder (1 for each final app) and after creating each project through the steps above, I remove the generated www folder and replace it with a symlink to the shared www folder that exists outside of these phonegap project directories.
This is supported behavior; the CLI allows you to generate your app with a symlink via the --link-to flag (see cordova help create for details). However, doing so seems to have issues; so I've resorted to doing all of the app config up front and then replacing the generated www folder with a symlink after everything is ready to compile.
At this point, I can deploy to either the iOS simulator or Android emulator, and I can deploy to devices over USB, and everything works just fine; all of my plugins are available and function as expected. So I'm ready to compile a release build. Android is easy. iOS, not so much.
$ cordova build ios
<snip>
** BUILD SUCCEEDED **
However, this is a DEV build. The generated file is in the build/emulator/ folder, and when I attempt to sign it, I'm told that it's not signed because of the I386 architecture (which indicates that it's a development build).
$ xcrun -sdk iphoneos PackageApplication -v "platforms/ios/build/emulator/MyApp.app" -o "/users/adam/dev/myapp/MyApp.ipa" --sign "iPhone Distribution: {our cert name} ({our cert id})"
<snip>
Codesign check fails : platforms/ios/build/emulator/MyApp.app: code object is not signed at all
In architecture: i386
<snip>
I've attempted to generate a release build from the cordova CLI. I haven't been able to find the --release flag documented anywhere, but the CLI doesn't complain, and it usually does if it doesn't recognize a flag.
$ cordova build ios --release
<same result as previously>
Attempting to sign this build results in the same problem.
At this point, I started attempting to work directly in Xcode. I've set the .mobileprovision file and the signing credentials up appropriately, to the best of my knowledge:
With these values set, Xcode no longer allows me to build:
So I'm stuck: I have no choice but to build locally, and I can't figure out how to get it to build for release and sign! Please help!
Additionally, if I attempt to embed a provisioning profile, that fails because of an issue with entitlements. I'm not exactly sure what this means, but I'm hopeful that it's a result of working with a dev build, and resolving that will resolve this as well.
$ test -e ~/.ios/DEV.mobileprovision && echo exists
exists
$ xcrun -sdk iphoneos PackageApplication -v "platforms/ios/build/emulator/MyApp.app" -o "/users/adam/dev/myapp/MyApp.ipa" --embed "~/.ios/DEV.mobileprovision"
<snip>
error: Failed to read entitlements from '/var/folders/zs/j2hmt69n12sbjm6gyn0m_q4c0000gn/T/tyYvYPQKf3/Payload/MyApp.app'
Update 1:
This SO question helped in one regard. I don't know how the active scheme (I'm not really sure what that means, but that's the tooltip when I hover over the control) got changed as part of specifying keys/etc, but clearly it did. Changing this back to an iOS Device, like iPhone, allows me to build my project, and even Archive (which, to the best of my understanding, means it's creating the .ipa file I need to submit to the app store), but I can't find the archived file. Where should it be? Can I define this in a setting somewhere in Xcode?
Update 2:
By fiddling with certificates and provisioning profiles I've finally been able to create an archive from Xcode, which I've been told is a release build (is it?). Ideally I would like to be able to build from the command line so that I can automate it as much as possible, so that's where I'll be picking up in the morning. Any advice on that front would be quite welcome!
If you managed to create an archive in Xcode, then your signing certificate and provisioning profiles are known to Xcode, so cordova build ios --release --device should make it.
The steps are:
1) Import your iOS developer certificate for production to the keychain by downloading and double clicking on it in Finder (or get it via Xcode)
2) Download your provisioning profile (with the App ID set to the id attribute of the widget element in config.xml) and double click it on Finder so it goes to the Xcode provisioning profile store
3) cordova build ios --release --device
it looks like you're trying to sign the app with a wildcard provisioning profile (the XCode screenshot). Can you try creating and downloading a distribution certificate and provprofile to your Mac? Then import the .cer file in the keychain access app (doubleclicking should suffice) and doubleclick the provprofile as well.
Now you should be able to select the appropriate values from the release dropdowns in the XCode build settings.
Hope this helps somewhat...
Eddy
One other issue I am seeing from your screenshot is I don't think you can Build an Archive (Release) version using the Developer Signing Idenetity, you would need to create a Distribution certificate and use that one for the Release (Archive) version.

Resources