UI Testing of iOS 3rd Party applications - No Source Code - ios

I'm working in the Aviation industry and part of my job is managing electronic flight bags (EFB). We rely on 3rd party applications such as Ozrunways/Jepp FDPro and therefore we don't have the source code or .ipa files to create UI tests through XCode.
There have been issues where updates to apps will get released with small bugs and we only find out via user reporting. I really don't wanna go down the road of creating a manual testing regime whereby each app is tested by humans pressing buttons on the device to ensure the UI/functionalities are the same.
Is there any way to automate this through the simulator or the device?
Note: I went down the appium path originally but realized without the .ipa file it's almost impossible.

You can run tests of Apple and 3rd party apps on the devices as well as Apple apps on Simulator by using XCUIApplication(bundleIdentifier:_)API. This way you can keep only your UI tests target, without any target app in target settings.
Example: https://github.com/rzakhar/xctest-assignment

Related

Combine two Xcode targets into one distributable app

I created two targets in my Xcode project. One for an iOS app, and the other for the iPadOS companion. Now I'd like to distribute them under one name and App Store link, but I can't submit different builds for iOS and iPadOS through App Store Connect.
I can't combine the targets into one, because I have some UI libraries that won't work on iPadOS and/or won't work on iOS. I'm also planning on making the iPadOS target into a Mac-Catalyst app, so I'd like to keep the targets separate for that as well.
Is there a way to archive these two targets together so App Store Connect sees both apps in the one upload? Or do I need to distribute the iOS and iPadOS apps under different bundle IDs.
You certainly could distribute them under different bundle IDs. It's very easy to make two targets share code, as you are probably already doing.
However, it is more usual to have just one app, a so-called "universal" app, that runs on both iPhone and iPad (and so is built using just one app target). It is quite normal for these to have some functionality that differs by device type; resources such as images or nibs can automatically load different versions depending on whether we're running on an iPhone or an iPad, and the traitCollection has a userInterfaceIdiom property that lets your code decide in real time what to do depending on that same distinction.
So just go ahead and load all your "UI libraries" for both device types, and just don't call into one of them if it isn't supported by the current circumstances in which the app finds itself running.

Running iOS code without simulator

I have noticed that Xcode is capable of running UIKit code for IBDesignables, without launching the simulator at all. It seems to be using IBDesignablesAgentCocoaTouch tool which is a macOS app. How something like that can be implemented?
iOS apps compiled for x86_64 are actually normal macOS apps, just linked against different frameworks. The simulator framework provides the runtime needed for all those framework to function in a manner similar to how they do on iOS hardware. The IBDesignablesAgentCocoaTouch daemon spins up enough of the iOS subsystem to be able to take a snapshot of your UI every time you make a change in Xcode. Theoretically, it is possible to spin up the iOS subsystem partially or fully in a different manner than how the simulator does, but this is most likely infringes on the developer license agreement you signed when installing, and would certainly not be legal for distribution. Legal or otherwise, it would be quite an undertaking, and very likely to break with each change to the system. It is enough to look at how widely the simulator framework has changed over the recent years to get a feel for how hard this would be for non-Apple developers.
If you need to run non-UI code for testing, for instance, there are far more easier ways to achieve what you need, such as creating a macOS target and including all your non-UI stuff in it, and stubbing out the absolutely minimum necessary UI stuff for testing.
If you want to achieve multiplatform development using iOS frameworks, and then running them using Apple iOS frameworks outside of the simulator, this is not legal (iOS frameworks are not distributed with macOS normally, and require installing Xcode), and is not a good idea, as users expect applications to behave natively on the platform they are running. iOS UI concepts fit best for touch input, but they would be out of place on a precision-pointer input ecosystem.

simulate xcode without development account

We have an app in Xcode from our old developers. We are in the registration process for an apple developer account, but on internet I read it can take a couple of weeks before it gets approved.
Is there a way I can simulate the app (like with TestFlight) without sending the actual code to potential new developers?
You can't distribute the app unless you have it signed/provisioned with needed UDIDs (which requires developer program). You can deploy it on your(s) device(s) using XCode though.
You should still be able to run the iOS simulator, which is generally the default behaviour for the build-and-run button - you can download more simulator environments in Xcode -> Preferences -> Components if you're missing one that you need.
Update: If you want third parties to run the app, there's no practical option apart from TestFlight. This is because iOS uses code signing to prevent trojan or pirated apps being installed on their devices. In that case you can consider other options which will achieve whatever your goals are, for example making a video of the app in use or setting up VNC access to a machine with the simulator (and code) on it.

Implications for developing iOS app on real device only?

I would like to use some lib file (.a) in my app.
I got the files from a 3rd party, to use an IP camera they developed.
As i understand there is no way to open this files, so i will use them as is.
The problem is the files requires real device architecture, so i can't run (or build) them
on the iOS Simulator.
What will be the Implications for developing iOS app on real device only ?
(Besides a slower build and run time and discomfort..)
Also, is there a way to change this requirement so it could run on the simulator ?
Thank you
You should write your own mock library, that exposes the exact same API the vendor provides, and test against that in your simulator. The functionality your mock library provides can be as boring or as exciting as you desire.

Is it possible to deploy an Adobe AIR desktop application to iOS?

I have an incredibly basic Adobe AIR 4.5 desktop project that I just want to use to test an iOS deployment. Is it at all possible to deploy this to an iOS device as it is? Or does it need to be turned into a Mobile project somehow?
The steps to creating an IPA file in the guide on Adobe's site (http://www.adobe.com/devnet/air/articles/packaging-air-apps-ios.html) seem to assume the project is already a mobile project. I'm a total newb here, but it sounds like this sort of thing is possible? Is it really? I'm having trouble finding information.
It is possible to create a simple Flash project and export it without modification for iOS. Obviously depending on what the project is doing, some things might need to be tweaked.
I am currently building several apps using the same fla and as files, which are targetted for browser and iOS use.
But in order to place anything onto an iDevice, be it just for debugging, testing or adHoc distribution, you need to be signed up to the Apple Development program, have an Apple provisioning certificate in place and have relevant apple provisioning profiles created.
There is a great course on lynda.com about setting yourself up for iDevice app building.
http://www.lynda.com/iOS-SDK-4-tutorials/distributing-ios-applications-through-the-app-store/77853-2.html?srchtrk=index%3A7%0Alinktypeid%3A2%0Aq%3Aios%0Apage%3A1%0As%3Arelevance%0Asa%3Atrue%0Aproducttypeid%3A2

Resources