IPA not uploaded to App Distribution using fastlane - firebase

I'm trying to upload IPA and APK files of a Flutter app to Firebase App Distribution using fastlane.
First time I deploy, both IPA and APK files were successfully uploaded to App Distribution. But after the first time, every time I deploy, the APK file is uploaded but the IPA is not uploaded, even though terminal shows that fastlane uploaded the IPA successfully.
Why is this happening and how can I fix this?

Your releases might be grouped under the first release so it would not show on the Firebase Console.
Checkout this comment on an issue on the fastlane repo with an explanation:
For background, App Distribution has a notion of releases and
binaries. For iOS, we uniquely identify a release by its version
information (CFBundleVersion, CFBundleShortVersionString) and a hash
of just the app code. This hash excludes resource files such as the
provisioning profile. A binary is uniquely identified by a hash of the
IPA, including its resource files. For iOS ad-hoc distributions, it's
common for releases to have multiple binaries associated with them
since it's normal for developers to upload the same code with an
updated provisioning profile to give testers access.
In the Firebase Console, the cards you see are releases. So what may
be happening is that you're uploading a build with no code changes. If
this is the case, a new release won't be visible in the Firebase
Console but the binary will be available for your testers to download.

Double check that you've completed the steps in this answer to enable auto-versioning - https://stackoverflow.com/a/63914373/12806961.
In my case I had manually changed the iOS build number so even though I was passing a --build-number argument to the flutter build ipa command, it was using the old value when I uploaded to Firebase App Distribution.
I needed to update my info.plist to look like this:
<dict>
...
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
...
</dict>

Related

Firebase distribution for iOS

We are develop an iOS app using react-native. And every time there is an update from developer, developer need to build and install on QA phone for testing.
Now, I am trying to use fastlane and firebase app distribution, to distribute new app for QA.
When I create new release, QA got an email notification about that, and they can check it on firebase app distribution. But there is no button for download and install, only message like this.
Device registered!
The developer now needs to update their app to run on your device. You'll get an email when the app is ready to test.
How to make it available to download?
Finally,
For release iOS app to firebase app distribution, you need to generate ad-hoc.
First, u need to create a profiles ad hoc key, u can create it on apple developer or use fastlane to generate it. Then save it inside your project.
Second, set export method inside build app to be ad-hoc.
Third, use get_provisioning_profile to get your profile ad hoc key.
I believe this is very likely because your version is already the same (I think it happened to me recently). Try updating your minor version of the app. (If you are not able to do this for some reason, you can just delete existing build and upload a new one).

Must upload one dSYM file is always showing in Firebase Crashlytics

I am developing a react native app and I am using Firebase Crashlytics. On my Crashlytics "dashboard" is showing that I must upload a dSYM file when the selected platform is IOS. I already followed the steps that Firebase suggests (after that is shown in my terminal the message "Successfully uploaded Crashlytics symbols") and tried different suggestions from another questions, but the warning is still there. I have seen some people saying that it could take 24 hours, but I am trying to resolve this for two days
Hope you can help me.
Thanks.
Firebaser here - I recommend starting here and going through the whole doc to try out all the listed suggestions: https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=ios.
In general, "Successfully uploaded Crashlytics symbols" only means that the execution of the terminal command and the submission of whichever files you picked was successful, not necessarily that the correct dSYMs were uploaded. To check if the dSYMs you uploaded were the ones that were missing in the Crashlytics console, you can run the following command and compare the output to the missing dSYMs tab:
dwarfdump -u /path/to/dSYM
If the dSYMs aren't the correct ones, you may want to check where you're downloading them from. If you've only tried your local Xcode archives, try downloading from App Store Connect (if the app has been registered with the App Store).
Otherwise, you can try this command to find any downloaded/archived dSYMs that match the ones from your missing dSYMs tab on Firebase:
mdfind -name .dSYM | while read -r line; do dwarfdump -u "$line"; done

This app is not authorized to use Firebase Authentication - Reg

I have upgraded my project from Firebase sdk version 5.4.4 to Firebase Sdk version 6.8.0, in unity version 2018.4.14f1. I have imported all necessary "dotnet3" unity packages into my project and taken a build and i get an error "This app is not authorized to use Firebase Authentication. Please verify that the correct package name and SHA-1 are configured in the Firebase Console. [App validation failed ]".
I have then generated "SHA-1" for my keystore again and added fingerprint in firebase console, tried changing project from "dotnet3" to "dotnet4" and imported all necessary "dotnet4" firebase sdk packages. Still i get the same error and i made sure package name, SHA-1 code are all correct and added, even then im facing issues regarding that.
Please help me regarding this issue, if my methods are wrong or is this an open issue with sdk version 6.8.0.
This sounds like you need to re-upload your SHA 1 for Android development.
The easiest way to do this is to use the keytool command installed with Java:
keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
The password for your debug keystore will be android, but if you're doing a signed release build (say for the Play Store), you'll want to use the appropriate keystore and credentials.
You then need to copy/paste the SHA-1 into the "SHA certificate fingerprint" field under project settings.
There is another great stack overflow answer here, but it is very Android Studio centric (you may not have it installed when developing in Unity).
I cover this at about the 5:12 mark of my getting started video if you'd prefer video instructions.
A few pro-tips before I go:
The Android debug keystore is randomly generated on each developer's machine the first time they build and deploy a debug application for Android. This means that you'll probably want each developer to upload their SHA-1 whose working on Firebase features (alternatively, each developer may want to setup their own Firebase sandbox for development purposes).
The combination of SHA-1 and your package name are what's used to identify which Firebase backend your game will use, so this could also be an effective mechanism to deploy separate staging and production backends.
dotnet4 should be used in most cases now (although Unity 2018 still lets you choose between 3 and 4). Generally, if you've chosen the wrong one the error you'll see is around Task. This is because Task didn't ship with the original version of C# that Unity used, so Firebase uses a library called Parse to retroactively add it (and make the API comparable to the Android and iOS counterparts). In .NET 4.x and higher, this means that you have two versions of Task included which will cause issues. The dotnet4 version of Firebase simply remaps any Parse specific functionality onto C#'s Task and uses the one that ships with Unity.
I hope this helps (and I hope that I properly identified the issue)
--Patrick

Customize Downloads for Gatekeeper

I have a Mac app that requires custom downloads for each user. I've done everything to sign the app for Gatekeeper, and it all verifies on the build. But when the app gets downloaded from the website with the custom file added, Gatekeeper no longer verifies.
Is there a way to do custom files without re-signing the app for each download? I just need to update a .plist file in the app bundle. The website is written in ASP.Net, so signing on the server probably won't work.
It sounds like you are attempting to sign your .app bundle, upload it to a web-server, and them modify a .plist value inside the .app wrapper before the .app bundle is downloaded and given to a customer.
Gatekeeper will not allow this. (At least, it will not allow it with "version 2" signatures, which are required for deployment on OS X 10.9.5 or later. It was permitted with the older signing system, so if you are content to deploy on OS X < 10.9.5, you could get away with it.)
See Apple Tech Note 2206 for reference (in particular the FAQ "I want to exclude files so I can fix my bundle after I build it"):
https://developer.apple.com/library/mac/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG302
Note: If you modify your .plist entry as you say you will end up with a broken signature, but all hope is not lost. If your users have the default security settings, they can still right-click on your .app bundle and say 'Open.' This will result in some scary security warnings from Apple, but if your users persist in clicking 'OK' then they will be able to run your app just fine.

Xcode Code Sign error: Provisioning profile 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' can't be found

I submitted a couple apps last week that were revoked by Apple. I fixed them and tried to sumbit these apps again.
I have been getting this error for two days. I erased all my certificates and provisioning files on the provisioning portal and created all new ones . Also, I cleaned up everything in my keychain.
I am sure I am using the correct provisioning file in Xcode's build settings, and yet I still get this error. Why?
I solved this problem by the following steps:
Go to the file path where you save your provisioning file:
~/Library/MobileDevice/Provisioning Profiles
and remove all the provisioning files you have downloaded today.
Download the new provisioning file from the Apple member center that matches your project.
Press Command+B, rebuild the project, and see if this issue still exists.

Resources