How to clean keychain when my application is uninstalled on ios? - objective-c

My application use the keychain to store users and passwords. When I remove and reinstall my app, the keychain is not clean, keys are always in the application.
How to detect the removing of my app and use my cleanKeyChain method ?

There is no observer to get notified if the app gets deinstalled. If the app is not running at that time its useless anyway. You can use bundle props (fresh = true on 1st run) and remove / add things again with a reinstall.

Related

modifying a bundled react native app using expo

I have created a react native using app and created an apk for that using expo. Now I have to make some modification in that app. So do I need to build that again using build:android? or Is there any method to modify content in bundled app
If you have the over-the-air updates that expo offers enabled (I believe it's enabled by default), then whenever you publish your app (expo publish), the app on your phone will update automatically (you don't need to download the new apk). That also works when the app is on Play Store.
The way this works, is basically the app requests an updated js file from a public url on launch and runs that js instead of the old one. I personally dislike this approach so I disabled OTA updates for my app. In case you do too, then, you either need to manually listen for updates in your app (please refer to the above link) or install the new apk every time you build a new version (this is only useful in development).

Expo uses old code even though new code has been deployed

I have a react-native app that is using Expo.
In the beginning of the project I pushed some code to the default publishing channel that was never intended to be used in production.
Since then I have released dozens of versions to production and mostly all works as expected. (New installs gets the latest JS code)
However, a few users still gets old versions of the code, even though they literally just downloaded the app from App Store / Google Play.
This is extremely frustrating. How can I make sure that fresh downloads of the app will download the correct/latest version och my JS?
Note that this is not related to the app detecting new code that might be available for download. It is the fact that the wrong code is downloaded and used to begin with. Is there any way to remove all JS-code except the very last version that I published? I imagine that would solve my issue
Turns out, expo don’t always do this successfully. You need to rebuild the react native bundle before publishing.https://proandroiddev.com/bundling-react-native-during-android-release-builds-ec52c24e200d
This is what expo gives as a feature known as Over the Air updates (OTA). Whenever a new version is built with expo channel, it automatically updates even in the app store and play store. But there is a way to disable the updates. the expo documentation for disabling:
It is possible to entirely disable OTA JavaScript updates in a standalone app, by setting updates.enabled to false in app.json. This will ignore all code paths that fetch app bundles from Expo's servers. In this case, all updates to your app will need to be routed through the iOS App Store and/or Google Play Store.
This setting is ignored in the Expo client.
And I do recommend you to read the documents of OTA, which is a good feature when you get to know all of it.
The expo link is expo OTA

OSX: NSUserNotification - Displays old app icons.

I am updating my build with a new UI and I changed the app icons. However when testing and running the new .dmg installs, the notifications keep displaying the old app icon.
Is there a way to clear the cache?
I think you can solve this by incrementing the Build number in the General section for the build Target. It worked for me :)
OS X apps typically contain multiple app icons which are used in different contexts (one for the App Store listing, one for Spotlight search, etc.)... have you done a search in the build directory to ensure that you don't have any only icons lingering in there?
I've had this issue before when I quickly removed the previous icons and added the updated ones but forgot to add all the sizes (thus it used the previous one for specific cases like notifications either because it was cached or still in the build folder);
What fixed this for me on 10.14 was to delete DerivedData:
rm -rf ~/Library/Developer/Xcode/DerivedData

How can I force my app into the Applications/ folder?

I am currently developing a desktop app in OS X which has a requirement for Autostart on Boot. I have implemented autostart and it works well when I install my app and put it in the Applications/ folder, but I can't expect users to move the file. I am distributing the app using HockeyApp.
So I've started building .pkg files with Packages. This works great and was really easy, but fails to update when used in HockeyApp. After downloading the update, I get a message saying An error occurred while trying to extract the archive. Please try again later. [Cancel Update]
Things I have tried:
Signing the update
Not signing the update
Downloading the most recent version instead of updating (works perfectly fine)
Zipping the .pkg (Fails to upload to HockeyApp)
How can I force my app into the user's Applications/ folder? Should I just ask my handful of (technologically challenged) beta testers to delete their app and download the new version? Can I make a change to my .pkg method to make it work? Should I add code into the app which moves itself (Sounds hacky and painful)?
You cannot force the user to install into /Applications, however if you get the app to arrange the auto-start itself (for example via the App Preferences) then it should use the current location of the app (probably obtained from [[NSBundle mainBundle] bundlePath]) and that will work fine.
You might want to periodically check if the app has moved after this has been turned-on.

How can I prevent calabash-android from pushing the apk for every feature file?

When I run calabash-android, it appears to push the apk to the device for every feature file. I would prefer to push the apk once and reuse it, as each push takes about half a second, and I expect eventually to have enough feature files for this to matter. I'd be happy with a solution which doesn't push the apk at all and to push it myself in an earlier step.
Is it pushing the app each time or just restarting the app? My tests restart between each step by default but I have always had to control the installations.
I deal with the installation by tagging the scenarios that require a reinstall and looking for the tag in my before hook.
If it is the restarting between scenarios that you want to control then you can use the RESET_BETWEEN_SCENARIOS setting.