I've encountered creative solutions to common problems people have with Appium while giving conference talks and providing onsite training for organizations. When it comes to having one set of tests for both iOS and Android applications, it's not always possible to share tests between your applications, but if you'd like to give it a try, here's my advice: abstract your tests to the level of user actions and create an implementation of those actions for each platform. This way, you can write generic tests that can be shared across both platforms. However, if the flows are different between applications, sharing a test might result in messy code and you'll probably be better off keeping them separate. If your applications are identical from a UI point-of-view on iOS and Android, then sharing a test is much simpler, as long as you ensure the accessibility IDs match on the corresponding UI elements in each version of the app. Additionally, automating SMS messages on iOS can be challenging due to the limitations of switching between applications, but setting iOS to show SMS messages as alerts can help. I've also assembled a collection of some capabilities that may prove extremely useful for Appium users, such as autoWebView, ignoreUnimportantViews, nativeWebScreenshot, locationServicesAuthorized, Auto[Accept|Dismiss]Alerts, and interKeyDelay. Finally, the network conditioning API in Appium allows you to simulate various states of connectivity while running your tests, which can be quite useful.