Xamarin.iOS: Could not launch instrumented app after using latest 3.2.0 lib

Ask general questions here.
r1v3n
Posts: 4
Joined: Tue Nov 26, 2019 9:44 pm

Xamarin.iOS: Could not launch instrumented app after using latest 3.2.0 lib

Post by r1v3n » Fri Jul 03, 2020 8:17 pm

Xamarin.iOS: Could not launch instrumented app after using latest 3.2.0 lib. When we were using the 3.0.4 source code instrumentation lib it was working correctly. However, using the new versions of ranorex studio along with serviceapp (3.2.0) make the instrumentation ipa not launchable anymore. It complains about the fact the URL scheme is not starting with "ranorex.", however it used to work without that with the older versions. Why is it like that? Thank you.

User avatar
Support Team
Site Admin
Site Admin
Posts: 12143
Joined: Fri Jul 07, 2006 4:30 pm
Location: Graz, Austria

Re: Xamarin.iOS: Could not launch instrumented app after using latest 3.2.0 lib

Post by Support Team » Mon Jul 13, 2020 8:30 am

Hello r1v3n,

Unfortunately, this is a known issue, but there are some notes on that from our developers.

The main manual instrumentation process is described on Ranorex web pages, here:
iOS in source IPA instrumentation

There are few items, which are required for manual instrumentation, which are not exposed in the Ranorex main web page.

In project plist file it is mandatory to add BUNDLE DISPLAY NAME. More information from stack-overflow:
CFBundleDisplayName is for changing the text below the app icon on your device (and simulator). To edit this, you can change the "Bundle display name under "info" in the project:
2wyWB.png
2wyWB.png (69.31 KiB) Viewed 114 times
Location of the Bundle display name attribute

During Ranorex instrumentation process our tools add to info.plist project file the url schema. This is mandatory to open the instrumented ipa from within RxServices application or from Ranorex Studio. An example of added schema looks like that:

Code: Select all

<key>CFBundleURLTypes</key>
<array>
      <dict>
  <key>CFBundleTypeRole</key>
    <string>Editor</string>
  <key>CFBundleURLName</key>
    <string>ranorex.your.application.name</string>
  <key>CFBundleURLSchemes</key>
    <array>
          <string>ranorex.your.application.name</string>
    </array>
      </dict>
</array>
For manually instrumented IPA a designer needs to add this schema to the application settings.
Warning: there exists Apple API, which lets to restrict any such schema from running the application from other applications. If a designer implements this functionality then it will not be possible to run even an instrumented IPA from within RxServices and Ranorex Studio.


Let assume that the instrumented application is prepared properly. It contains CFBundleDisplayName and CFBundleURLSchemes defines properly. To make this application recognizable by RxServices IPA there are required three steps to be done:
  • Run RxServices IPA and put into background;
  • Run the instrumented IPA and also put it into background; Now, the new instrumented IPA should be listed in available IPAs in RxServices application as well as in Ranorex Studio;
  • However, to run any instrumented IPA while both RxServices and the instrumented IPAs are in background it is mandatory to run with parameter resetinitialstate set to true
Regards,
Bernhard
.
Image

r1v3n
Posts: 4
Joined: Tue Nov 26, 2019 9:44 pm

Re: Xamarin.iOS: Could not launch instrumented app after using latest 3.2.0 lib

Post by r1v3n » Tue Jul 14, 2020 2:52 pm

Thank you for your support Bernhard.

I added the URLTypes section containing the URLSchemes to our plist. However, I endup with the same result when launching the app from the RxServiceApp. It's like if it was ignoring that section and still complaining about that missing section. Here is a partial print from PlistBuddy with the Info.plist in the ipa instrumented file. So I can confirm that the section is there.

Dict {
UIRequiredDeviceCapabilities = Array {
arm64
}
com.xamarin.ios = Dict {
Version = 13.18.2.1 (d16-6: 29c4ea731)
}
CFBundleInfoDictionaryVersion = 6.0
UISupportedInterfaceOrientations~ipad = Array {
UIInterfaceOrientationPortrait
UIInterfaceOrientationPortraitUpsideDown
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
}
UIRequiresFullScreen = true
CFBundleURLTypes = Array {
Dict {
CFBundleURLName = ranorex.myapp
CFBundleURLSchemes = Array {
ranorex.myapp
}
}
}
CFBundleName = My Application
....

What else could cause that? Thank you