Previously, I tried to install every Catalina update via Recovery Mode because it always failed in System Preference -> Software update.

Unable to verify software update

Reference: Reinstall from macOS Recovery , it said

Option-⌘-R

Upgrade to the latest macOS that is compatible with your Mac.

That works well until I tried to install/upgrade Big Sur beta.


This is a basic case for one-to-one relationship using left join multiple tables. Let’s start from describing the use case in a scenario:

Say your Sales team has a contact database stored all the customers’ contact, and each contact has its owner who is a Sales agent in your team.

So when you look up the whole contact list,

  1. You would like to see the corresponding agent.
  2. You would also like to search those contacts based on an agent’s name
  3. Or You would like to sort all contacts using agent’s name.
Contacts table
Sales agents table

First, we have to…


I can imagine most of the application back-end servers are leveraging AWS SNS to send push notifications to android and iOS devices for it integrated well with FCM and APNS.

One day, I found my development iOS app is not receiving VOIP push notification anymore! This is extremely scaring for those who are providing real time service like call, messaging, streaming,…etc. After immediately testing our production app and confirmed this is a ‘development-only’ issue, I got some relief.

But it still is a bummer that VOIP push is not working in sandbox. How would I test my work? I will…


audio device menu

Previously, we introduced How to add audio device action sheet to your iOS app, I believe there is the same need for android app. So here we go again.

Similar to iOS devices, there are 3 typical audio routes: DEFAULT, SPEAKER, BLUETOOTH.

The DEFAULT route is the handset and will become wired headset if there is a plugged one.

Let’s see how to configure out the current route on the android device.

DEFAULT wired headset

We will need to listen to the broadcast intent: ACTION_HEADSET_PLUG.

SPEAKER

We can directly get from AudioManager:

AudioManager.isSpeakerphoneOn()

BLUETOOTH

We can also directly get from AudioManager:

AudioManager.isBluetoothScoOn()

But usually…


audio devices action sheet from Callkit

When developing an app with music, video, call functions, it always comes up this requirement:

How to select a desired audio device

Like the above image, it’s from CallKit where you can select the desired audio output from this action sheet.

First, we have to understand how many audio routes and how they switch. We will be based on developing a phone call app because it can involve both audio input and output.

iPhone: the iPhone handset is default route for a call.

Speaker: the speaker is the default output audio for like music, video, ring tone.

Bluetooth: whenever a…


What a beautiful island like Catalina!

However it probably gonna to be:

What a painful experience to update Electron app for Catalina!

It was exciting after upgrading macOS from Mojave to Catalina and see the beautiful desktop wallpaper, even it took like FOREVER to complete!

The excitement didn’t last more than 1 minute, because I found several apps just become ‘cannot be opened’.


I have been fighting this issue for quite a long time, since I bought a new Mac mini early this year and restored the system with my TimeMachine backup, every time when there is a Mojave update comes out, I always got this “update failed” warning.

Unable to verify software update

And my first idea is “What do you mean? Come on!”.

Then I googled and tried like everything:

Reset PRAM

Reset NVRAM

Turned off System Integrity Security in safe mode

Install from a downloaded Combo Update installer

And it ended up with No Luck!

Then I tried another direction,

Backup, Install new MacOS, Restore…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store