I'm trying to deploy a multi-platform application (written in Delphi XE7 + Firemonkey) to iOS Simulator, through these parameters:
- Delphi XE7
- OSX 10.8 Mountain Lion
- XCode 5.1.1
- Command Line Tools
- PAServer 15.0 (iOS SDK 7.1 - also tested with 6.1)
My Application needs to work in Windows, Android, iOS and OSX. Working already for all but iOS, including OSX which I compile to using the same setup, with no problems.
I created a connection profile to my PAServer, using a password, and this profile works OK both compiling to OSX and when compiling a hello-world-ish application for iOS, just with a button or two.
As for my app, I can compile and build it for iOS without a problem, but when I try to run it in iOS-Simulator, it compiles, deploys, and when launching, it fails, returning an error:
Unable to launch process on '192.168.25.37' using the parameters from the 'iOS' profile. The following error was returned: 'Session Ended'
This is my first app for iOS, so I'm swimming in strange waters here. It has no external libraries, except of course for the ones Delphi itself might add when compiling. I myself did not, and the app has just forms, and accesses a text file in its sandbox folder, and a mysql server via UniDac (direct mode, no dll's).
I tried to get to the bottom of it, commenting out sensible code in my app, namely everything that was iOS specific, but that amounted to nothing.
I then created a new app, just a button and a ShowMessage on its handler and it worked.
Next step, I started trying out my app units on this simpler app. The first one I tried was a unit I have for a custom component (a TRectangle with a TPanel, 3x TImage, a TLabel and a TCheckbox inside), with another class with a Generics TObjectList of the component). I just added this unit, without instantiating any class, and it failed, reporting an 'unknown error'.
So I removed the unit from the project to double check: Again it fails, with the same button and showmessage that worked before.
I've installed then the SDK 7.1, but failed as well.
I've been looking through the web trying to make some sense out of it, and have found several similar cases, but none that could actually help me:
Delphi FireMonkey iOS App: Error while Deploying to iPhone Simulator 8.1 On this case, there's a problem with PAServer and there's a fix for it, but it refers for SDK 8.1 and XCode 6+
Unable to install and run iOS app on Simulator from command line - Simulator of iOS 6.1 Xcode 5 on mavericks I couldn't install ios-sim via the refered way, most probably because I have zero experience with OSX. Still, I cloned it from GitHub and managed to install it via command line and XCodeBuild with some help from internet, but when I tried to run my app, ios-sim says it needs at least XCode 6, which I don't have (OSX 10.8 here, I believe Xcode 6 needs at least 10.9).
After that, I installed another, iPhoneSim, and strangelly, after that ios-sim no longer questions for Xcode6. Still, it fails to start my app (even a freshly created hello-world-ish that works when run via Delphi), stating:
DEBUG] Failed to find class DTiPhoneSimulatorSystemRoot at runtime.
Even tried installing WaxSim, but this one failed to install.
I did not however tried compiling it for a iDevice, because for that I need to subscribe Apple Developer program, and I was hoping to do that only after making sure everything was working OK. Plus, I', not sure it would make a difference.
Has anyone experienced this 'Session Ended' problem, and if so, do you know of any reason and fix.
Thank you
After a few days, I found out what the problem was, so I'll post the solution here to help others who might have the same problem.
Go to Project --> Project Options --> Version Info
Under de iOS Simulator configuration, Delphi IDE (XE7) automatically inserted the following key and value:
As it turns out, there are several other tweaks needed for an iOS project: Here are the keys found in Embarcaderos iOS demo app "Location", which solved my problem once I inserted them in my project:
There is one special key, which I believe it's the main reason for the 'Session Ended' error: UIDeviceFamily
This key has 3 options (instead of accepting any string value): - iPhone - iPad - iPhone & iPad
Without this, iOS simulator doesn't know which type of app it is, UI wise, so it doesn't launch. You need to add the key with the respective key name, and then choose the UI type using the respective ComboBox.
Also missing in the project is in:
Project -> Project Options -> Application There is a list, both for iPhone and iPad, with the paths to the default icons, in several sizes, which is not correctly filled when creating a new Project.
So, you can either use your own icons and images, or use the defaults: