Jump to content

Search the Community

Showing results for tags 'android'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • Delphi Questions and Answers
    • Algorithms, Data Structures and Class Design
    • VCL
    • FMX
    • RTL and Delphi Object Pascal
    • Databases
    • Network, Cloud and Web
    • Windows API
    • Cross-platform
    • Delphi IDE and APIs
    • General Help
  • Delphi General Discussions
    • Tips / Blogs / Tutorials / Videos
    • Delphi Third-Party
    • Job Opportunities / Coder for Hire
    • I made this
  • Software Development
    • Project Planning and -Management
    • Software Testing and Quality Assurance
  • Community
    • Community Management

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start




Found 33 results

  1. How limit to one instance on android, windows, linux and mac ? There is any cross platform code? Thank you in advance. Pavel
  2. Chester Wilson

    Manual handling of virtual keyboard

    Is there a way to stop the automatic pop up / pop down of the android virtual keyboard? (So I can do it manually when I want it.) The application has a tMemo which provides information to the user. As there is not much room on a small android, it requires scrolling up and down at times. At these times the bloody keyboard comes up and gets right in the way!
  3. Hi there, I'm checking in iOS (and later for Android, Windows, etc.), what is the best, right way to Sleep in a background mode of the OS. The implementation for iOS seems to be same, as Posix, for iOS, Android, Macos, but I didn't checked that. My goal is to stop any OS operation in the background mode, to avoid killed apps by the OS. While the Thead loop is still active, but only throttled. TThread.Sleep - uses usleep, which is external function, as far as I know based on nanosleep - is this really affecting the current thread only ? class procedure TThread.Sleep(Timeout: Integer); begin {$IF Defined(MSWINDOWS)} Winapi.Windows.Sleep(Timeout); {$ELSEIF Defined(POSIX)} usleep(Timeout * 1000); {$ENDIF POSIX} end; System.SysUtils.Sleep - is bascially same {$IFDEF MSWINDOWS} procedure Sleep; external kernel32 name 'Sleep'; stdcall; {$ENDIF MSWINDOWS} {$IFDEF POSIX} procedure Sleep(milliseconds: Cardinal); begin usleep(milliseconds * 1000); // usleep is in microseconds end; {$ENDIF POSIX} System.SyncObjs.TEvent.WaitFor - is defintively based differently - uses a sem_timedwait (here and here also) - this probably waits by counting in a semaphore, so its not a "real" sleep of the OS, right ? Shall I better use Sleep or TEvent.WaitFor, to let threads sleep in the OS, while avoiding too many wakeups and operations in the background ? Is TEvent.WaitFor really sleeping, from a iOS OS perspective, or will it be seen as running app ? What I assumed before is that TThread.Sleep really stops the thread, and passes back CPU operation to other tasks, but I'm not so sure anymore under IOS.
  4. I was able to use Firemonkey to develop a multi-platform game, specifically for Android at first. After thoroughly debugging the app when running in Windows, I then deployed it in my Android tablet, and there were several problems, especially with regard to drag-and-drop, plus images that would remain on the screen when they should have disappeared. These problems were intermittent -- difficult to re-produce reliably. Nevertheless, I spent many hours trying every little trick I could think of in terms of structuring the code (e.g. different ways of trying to make a glyph disappear), but still could not get the functionality to where it needed to be. I was using Android 32-bit - Android SDK 25.2.5. Again, this app would run consistently and perfectly when running the Windows version! Unfortunately, I'll have to give up on this project unless someone has a bright idea.
  5. Hello, I was developing a mobile application for my school, I were using Delphi Rad Studio Rio 10.3. Here is brief description what application is doing: in some editboxes user adds data -> proceed to next tab On second tab user is choosing video that he wants to preview, while video is playing he is clicking some buttons to mark duration of some activities on video that he loaded ... After that i am making a PDF report and saving to storage. I made whole application and it is working great, problem is that I used this library for slowing down video preview -> https://github.com/Zeus64/alcinoe i had some issues with this library ( most of them were configuration issues ) but at the end I managed to resolve all of them and make my app. So why I used this library? Answer is that it had option to set speed preview of video. Before I started using this library i was trying for a few days to implement this -> https://stackoverflow.com/questions/18526336/playback-video-in-slow-motion-in-android check answer from " karanatwal.github.io " Problem was that I didnt know how to rewrite this android code into delphi FMX code : videoview = (VideoView)findViewById(R.id.videoview); videoview.setVideoURI("Your Video URI"); videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { //works only from api 23 PlaybackParams myPlayBackParams = new PlaybackParams(); myPlayBackParams.setSpeed(0.5f); //here set speed eg. 0.5 for slow 2 for fast mode mp.setPlaybackParams(myPlayBackParams); videoview.start();//start your video. } }); So now I would like to rebuild my application and exclude this " alcinoe " library cuz I use it only for setting playback speed.. Can somebody help me rewriting this to a delphi code ? Thank you EDIT: I will later post code snippet of how i retrieve path of video and how i load it, code is not that great because it was one of my first projects but maybe it will help someone who reads this.
  6. I developed an application using Delphi Firemonkey for managing my own commercial complex. I have named it EasyTenant. Overall development experience is good, though not excellent. Development was really faster because of the RAD nature. Third party components are limited for Android Firemonkey. GUI is average, not rich like other languages like Swift, Java, etc. Delphi lovers please give your feedback by looking at the screenshots. UX for me is okay not excellent.
  7. Hi there, I've got a strange exception, only with Android 32-Bit during Debugging, other platforms including IOS work well. With iOS 64 I had no issue seen, but wouldn't count on it right now. I use a TDateTime variable, and want to compare against NULL.. Since TDateTime is a Double with 8 Bytes, a simple cast to Double( Self ) should make not any harm. Maybe there are special conditions on Android, as Extended is reduced to Double, and maybe there are some conversion side effects with Double as well ? I use a class helper for adding such functionality, which is used in a million other places too. function TDateTime_Helper.ToDouble : Double; begin Result := Double( Self ); // Here it crashes, see images enclosed, they only have 2 ARM assembler lines end; and I already extended my conversion routing to separated local variables: // global variable for storage, only reading var LUNull : TDateTime = TDateTime( 0.0 ); class function TDateTime_Helper.Create_Null : TDateTime; begin Result := LUNull; // Could the global variable cause issues in a Thread ? Buts its readonly. end; function TDateTime_Helper.IsNull : Boolean; var LSelf : Double; LNull : Double; begin LSelf := Self.ToDouble; //11.03.20 added local variables, to check Android crash LNull := Create_Null.ToDouble; if SameValue( LSelf, LNull ) then Result := True else Result := False; end; I check a variable, which is called in a thread if FLastUpdate.IsNull then // called like this begin .... end I must confess that I use above scheme in many thousands of places, also heavily within threads (even higher loded), without an error before. The caller can be debugged very reliable, and the error is very reproducable When the caller comes in first, second, third time, with zero, all is fine When the caller comes in with a real Double value, I can debug and see a valid double value in the watch (e.g. FLastUpdate = 43901.1603147338 ) Inside the conversion ToDouble it crashes When entering with Zero, it looks like the images img. 1 and 2 (see the registers changing) When entering with Date, it looks like img. 3, and immediately it crashes at img. 4 What could cause such error, it sounds a little like failure of JNI Bus, but maybe I'M totally on the wrong track ? Probably there is some genius with a good hint how to fix this nasty bug.
  8. microtronx

    Android Service using local sqlite DB

    As in different old topics written, it is still not possible to have a android service with a tfdconnection or a tsqlconnection on it. The service is not starting any more, you use this. Here's a link: https://forums.embarcadero.com/thread.jspa?threadID=229761 But what can we do? Is there a known solution? I'm not able to find one. Have tried to create all components in service's code but still, i don't even get a log entry that means the service still can't be created and the app hangs on trying to start the service. Anone out there who can give some tips?
  9. We've implemented InAppPurchases, it works but if the user buyes a 12 months subscription on finsih i get this error is returned in "OnError" as tFailureKind.Purchase: IabResult: IAB gab keine purchaseData oder dataSignature zurück (response: Unbekannter Fehler) But Google says purchase is successful. I see the subscription activated. If i do a InAppPurchase.QueryProducts the product is listed as activated. Is someone using this with Rio and working? Is there any other component available than the integrated from embc. Such a base-function should work out of the box but does not.
  10. Hi, i know that Rio does not support below API16 but we have some older apps for industrial devices we need to update them. They were programmed with Tokyo with a lot of problems and i want to test them with Rio. Rio is installed on a new VM so i want to know if someone has get it work to compile apps for api level 16 / android 4.1.1 with Rio.
  11. ertank

    Android 64bit and 32bit permissions

    Hello, I am using Delphi 10.3.3, targeting Android 64Bit and 32Bit. Attached is a test project I used. If that same project is compiled for Android 32Bit it gets two permission request as can be seen in below pictures However, if same code without changing anything is compiled for Android 64Bit it only asks for a single permission as can be seen in below picture Both bitness apk files are tested on same physical phone running Android 9. I have tried to change order of permissions in request to see if this is related with request order. I always get same above permission asked on 64bit version. Let me know if you think this is a bug in Delphi, please. Thanks & regards, Ertan Android64Bit_Permisions.7z
  12. Devart, the leading provider of database management software, connectivity solutions and developer tools, released the new version of EntityDAC 2.3, a Delphi ORM framework for fast object-relational mapping of database objects to Delphi classes using LINQ. The key update in this release is support for 64-bit Android app development, following the release of RAD Studio 10.3.3 that includes a new Delphi compiler for the ARM platform. In RAD Studio 10.3.3, you can build Google Play Store ready Android 64-bit applications, complete with Android App Bundle Support — the official publishing format for Android apps. The new version of EntityDAC will come in handy since, starting August 1, 2019, apps published on Google Play need to support Android devices with 64-bit architectures, which means publishers are required to provide 64-bit versions in addition to 32-bit versions. The trial editions of EntityDAC for macOS and Linux are fully functional: the vendor removed the limitation on the number of ORM metatypes that users can create with the trial version of EntityDAC on these platforms. To learn more about the recent release, visit — https://blog.devart.com/entitydac-now-supports-android-64-bit.html. About Devart Devart is one of the leading developers of database tools and administration software, ALM solutions, data providers for various database servers, data integration and backup solutions. The company also implements Web and Mobile development projects. For additional information about Devart, visit https://www.devart.com/
  13. Hi Folks, i'm new to Android Services world but have successful created my first app with a background-service (used demo of Kastrifree / CrossPlatformLocation) as base. It works good, but as soon i add a tfdconnection for a local sqlite table or a TDSRestConnection for connecting to a remote-server in the service-module it does not start. My question is: What are the limits of a android-service-module created with Delphi Rio? What is blocking the service from starting if we add one of those components?
  14. Hello, I am using Delphi 10.3.3, Indy (stock Indy version) I am trying to listen broadcast UDP messages on Android (exact version I am testing is 4.4.2, I need to support latest versions, too) connected to a local WiFi. Broadcast messages will be sent in same network. I have found this page https://stackoverflow.com/questions/19040674/delphi-xe5-tidudpserver-does-not-receive-anything-on-android and tried to do it as to my understanding. Project has CHANGE_WIFI_MULTICAST_STATE permission set. UDP server parameters are as following at design time and everything else is left as default: TIdUDPServer.Active = False TIdUDPServer.BroadcastEnable = True TIdUDPServer.DefaultPort = 8080 I have following code where timer is activated as last line in OnFormCreate() event and has 0.5 seconds delay: procedure TForm3.tmrCheckPhoneServiceTimer(Sender: TObject); var WifiManagerObj: JObject; begin // Run just once tmrCheckPhoneService.Enabled := False; // Get necessary OS settings to receive broadcast messages Log('Getting multicast lock...'); WifiManagerObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.WIFI_SERVICE); FWifiManager := TJWifiManager.Wrap((WifiManagerObj as ILocalObject).GetObjectID); FMulticastLock := FWifiManager.createMulticastLock(StringToJString('LightFactory Remote')); FMulticastLock.setReferenceCounted(True); FMulticastLock.acquire(); // Try to open a port on Android by sending a broadcast message Log('Sending a broadcast message...'); IdUDPServer1.Broadcast('test', IdUDPServer1.DefaultPort); // Now we can start to listen Log('Activating UDP listener...'); IdUDPServer1.Active := True; if FPhoneDialerService = nil then begin TDialogService.ShowMessage('PhoneDialer service not supported'); Exit(); end; PermissionsService.RequestPermissions([FCallPhonePermission], MakePhoneCallPermissionRequestResult, DisplayRationale); end; I have following code in my OnDestroy() event: procedure TForm3.FormDestroy(Sender: TObject); begin // Stop listenning. IdUDPServer1.Active := False; // Release multicast lock FMulticastLock.release(); end; My broadcast listening code is as following: procedure TForm3.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); var Data: string; begin Data := TEncoding.Default.GetString(AData); TThread.Queue(nil, procedure begin Log('Incoming broadcast message from: ' + ABinding.PeerIP) end); if SameText(Data, 'mytriggerphrase') then begin TThread.Queue(nil, procedure begin TestConnection(ABinding.PeerIP) end); end; end; After I run the app, I have following in my log: 2020-01-14 00:59:33.697 Getting multicast lock... 2020-01-14 00:59:33.736 Sending a broadcast message... 2020-01-14 00:59:33.740 Activating UDP listener... 2020-01-14 00:59:33.804 Incoming broadcast message from: That IP number in above log belongs to Android device itself. I have following problems that I could not figure a solution: 1- I do not get any other broadcast message from my PC application which is sending one broadcast message each second. Is there anything I am doing wrong for that to happen? 2- I get segmentation fault (11) when closing my app. Detailed call stack and exact line is in attached picture. This happens each and every close. I did not understand why. Lastly, I am not sure if my code is doing it correct to keep multicast lock thru all run-time. I read a suggestion to release a multicast lock once finished with it in order to save battery life. So, I wonder if I can release multicast lock right after enabling my TIdUDPServer? Any help is appreciated. Thanks & regards, Ertan
  15. ertank

    Android service compilation fails

    Hello, Using Delphi 10.3.3. I have no problem compiling Android apps. I just needed to use a service to test something and I failed to compile. Below is error message I receive on a new Android Service project: [Exec Error] The command ""\bin\javac" -d "C:\Users\Ertan\Documents\Embarcadero\Studio\Projects\JavaClasses\Project2" -Xlint:deprecation -classpath "C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.36039.7899\platforms\android-26\android.jar";"c:\program files (x86)\embarcadero\studio\20.0\lib\Android\Debug\android-support-v4.jar";"c:\program files (x86)\embarcadero\studio\20.0\lib\Android\Debug\fmx.jar" -bootclasspath "C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.36039.7899\platforms\android-26\android.jar" -encoding UTF-8 -target 1.6 -g -source 1.6 .\Android\Debug\Project2.java .\Android\Debug\Project2ProxyInterface.java" exited with code 3. I have no problem running javac on command prompt C:\Users\Ertan>javac Usage: javac <options> <source files> where possible options include: -g Generate all debugging info -g:none Generate no debugging info -g:{lines,vars,source} Generate only some debugging info -nowarn Generate no warnings -verbose Output messages about what the compiler is doing -deprecation Output source locations where deprecated APIs are used -classpath <path> Specify where to find user class files and annotation processors -cp <path> Specify where to find user class files and annotation processors -sourcepath <path> Specify where to find input source files -bootclasspath <path> Override location of bootstrap class files -extdirs <dirs> Override location of installed extensions -endorseddirs <dirs> Override location of endorsed standards path -proc:{none,only} Control whether annotation processing and/or compilation is done. -processor <class1>[,<class2>,<class3>...] Names of the annotation processors to run; bypasses default discovery process -processorpath <path> Specify where to find annotation processors -parameters Generate metadata for reflection on method parameters -d <directory> Specify where to place generated class files -s <directory> Specify where to place generated source files -h <directory> Specify where to place generated native header files -implicit:{none,class} Specify whether or not to generate class files for implicitly referenced files -encoding <encoding> Specify character encoding used by source files -source <release> Provide source compatibility with specified release -target <release> Generate class files for specific VM version -profile <profile> Check that API used is available in the specified profile -version Version information -help Print a synopsis of standard options -Akey[=value] Options to pass to annotation processors -X Print a synopsis of nonstandard options -J<flag> Pass <flag> directly to the runtime system -Werror Terminate compilation if warnings occur @<filename> Read options and filenames from file C:\Users\Ertan> My version of "javac.exe" is located at C:\Program Files\Java\jdk1.8.0_60\bin\javac.exe I have seen some people having exact same error on my searches. No solution that I could find so far. I am planning to setup a virtual machine to install fresh copy of Delphi 10.3.3 and test if working on it. Before I do that I wonder if there is something I need to check. Thanks & regards, Ertan
  16. Hello, I am using Delphi 10.3.3. I would like to read caller number right at the time phone is ringing. Edit: I am looking for a solution for Android platform only. Using google, I have found a lot of samples from past about reading call logs, placing calls, etc. I could not find how I should be reading caller number right at the time of a call. Any help is appreciated. Thanks & regards, Ertan
  17. Hello everyone. I am happy to see that the delphi community is alive! I love delphi and when I wanted to write a game I was told Unity is the way to go. So I wrote a game in unity but I hate it. I would like to make a game in Delphi. However, I hit a snag... I can't find information online on about how can I save progress and use leaderboards using google play services. On Unity it was pretty easy, but like I have said, I can't stand C# and Unity its not human friendly. At least not to my taste. Can anyone please help me with a short tutorial or some sample code? I would greatly appreciate it. Thank you.
  18. There are 50 new cross platform samples for Delphi 10.3 Rio FireMonkey available over on Github. The demos heavily feature … http://www.fmxexpress.com/50-cross-platform-samples-for-android-ios-osx-windows-linux-and-html5-in-delphi/
  19. Hi I have an issue with an app crashing on some Android devices. The devices on which the app crashes are some Android 9 devices; although on other Android 9 devices the app works fine. The crash happens ONLY when the app is connected to the internet. When I disable the Wi-Fi, it doesn't crash. To test it, I run the app with the Wi-Fi disabled, it starts up fine. While the app is running I enable the Wi-Fi and the app crashes after a couple of seconds without me doing anything. I've attached the Android log file if anyone could help me point out where the problem is. Tx log.txt
  20. Devart, the leading provider of database management software and developer tools, released the new version of its data access components for Delphi. The key feature of the recent update is support for 64-bit Android app development, following the release of RAD Studio 10.3.3 that includes a new Delphi compiler for the ARM platform. The update will be of particular use due to the fact that starting August 1, 2019, all the apps published on Google Play need to support Android devices with 64-bit architectures. The release also includes such key enhancements as: The support of new versions of RDBMS: PostgreSQL 12 in PgDAC, Oracle 19c in ODAC, and InterBase 2020 in IBDAC. The support of the latest Lazarus version 2.0.6, a free IDE for rapid application development using the Free Pascal compiler. MySQL and PostgreSQL data providers now support OpenSSL 1.1, a library that implements TLS and SSL protocols to secure communications between a client and a server. TLS 1.2 was supported in Direct mode in SDAC. It is a security protocol that provides privacy and data integrity for client-server applications that exchange data over a network. Also, the 6-field limitation in the trial version of data access components for macOS and Linux was removed. Users now can execute the test code against a large database to make sure everything works as intended. Learn more about Data Access Components for Delphi on the Devart official website - https://www.devart.com/dac.html About Devart Devart is one of the leading developers of database tools and administration software, ALM solutions, data providers for various database servers, data integration and backup solutions. The company also implements Web and Mobile development projects. For additional information about Devart, visit https://www.devart.com/
  21. I have an android app that works fine on an Android v5 but not on v7 or v9. On the V5 device, the ProfileResourceReceived is triggered but not on the v7 or v9 device. What changed? Is there a fix? Delphi CE 10.3.2 The mobile app asks for the database: This works on all versions. procedure TfrmMMMP.Get_Database; begin TabControl1.ActiveTab := tbtmhome; tetprof.SendString(tetMan.RemoteProfiles[FRemProfIndex], 'Get_Database', 'Get_Database'); end; The Server gets the db and streams it to the app: This is a VCL app. It catches the request from all versions. procedure TfrmMMMPServer.thrprofServerResourceReceived(const Sender: TObject; const AResource: TRemoteResource); var ms: TMemoryStream; fs: TFilestream; LStream : TMemoryStream; begin if (AResource.Hint <> '') and (AResource.Hint <> 'ClientLog') then ToTheLog('> AResource.Hint: ', AResource.Hint); if AResource.Hint = 'Get_Database' then begin if Connected then begin ms := tmemorystream.Create; ms := dmMMMPServerVCL.GetDbAsStream; ms.Position := 0; thrprofServer.SendStream(thrmanServer.RemoteProfiles.First, 'Here_TheDB', ms); end The app catches the Response and populates a ListBox: This does not trigger on Ver 7 or Ver 9. procedure TfrmMMMP.tetProfResourceReceived(const Sender: TObject; const AResource: TRemoteResource); begin if AResource.Hint = 'Here_TheDB' then begin DoStreamTheDb(AResource); DoFillLB(lbxRecipeNames); tabcontrol1.ActiveTab := TbtmRecipes; end
  22. John Kouraklis

    Android in VMWare

    Today I installed Android Nougat in VMWare and then connected the IDE to the VM via adb and it shows as a device in the "Target" branch. When I run/debug an empty FMX project the IDE deploys everything correctly and then it launches the app. Here is where the problems appears. The app loads, I can see the splash screen and then it crashes. I have tried with different SDKs but the problem is there. Anyone any ideas where to look at for the problem? I am keen on making it working. The whole process is way much faster than with a physical device.
  23. Hi, I create a new FMX app, select Android as the target platform and the device, I hit Run (and/or with Debug) and all works fine. The app is deployed correctly to the device and launched. Then, I save the form and again all works fine. Then, I save the project and then the IDE can not build/deploy it. I get the following message: [PAClient Error] Error: E2312 C:\****\AndroidManifest.xml:20: error: No resource identifier found for attribute 'resizeableActivity' in package 'android' Even if I rename the project back to Project1, it does not work. After inspecting the manifest files, the IDE adds this line android:resizeableActivity="false" which is not added when I run a new project. Now, it appears that the AndroidManifest.template includes the same line but it doesn't cause problems until I save a project. If I delete the line from the template, all works fine. Anyone knows why that line generates an error? Thx
  24. Hello, I am using Delphi 10.3.2 and I have that project I need to use APDU commands communicating a Mifare card. I do not know java language. However, Android seems to have support for APDU commands for a very long time (like old versions such as 4.4 has that support). I have found following document: https://developer.android.com/reference/android/nfc/tech/IsoDep My problem is, I do not know APDU command use is possible with Delphi 10.3.2 on Android. I have found only one blog about RFID with Delphi FMX and that is for communicating smart tags. Unfortunately not providing help on APDU usage. http://blong.com/articles/delphixe7nfc/nfc.htm I can't find any other information about Delphi FMX and APDU. I appreciate any help. Thanks & regards, Ertan
  25. Dear all, I'm still upgrading my older projects from 10.3.1 to 10.3.2, and try this as always as sensitive as possible. But it turns out that too many libraries under Android would have been changed. This is my orginal project loaded in 10.3.2 So I'm better off to create a complete new, empty project , and reset all my old values from 10.3.1 step-by-step. In 10.3.2 the libraries looks like this So I try to figure out what would be the best way to make such upgrades, which can be very tricky these days. I know @Uwe Raabe and his ProjectMagician, thanks for that nice tool. There are also OptionSets, MigrationTool, etc., many ways to successfully reset or completely destroy your .dproj files. I want to consider the basic steps here, and hope to get some feedback, how this can be done best (without expecting strange side-effects) in a complex world. Steps to upgrade: Backup your orignal project Create a new, empty multidevice application Remove the Mainform (Unit1) and other from the main form, this will be reset later from the older project. Save and overwrite the Project file to the same .dproj !! Make global settings in Project options\All configurations first, and try to keep minimal changes from there only In later separations of Debug or Release, these changes will be done in the respective configurations later. Adding special libraries, frameworks, etc. needed for the app Adding special ressources/images needed to deploy with the app Setup Search path, version no., bundle identifiers, entitlements, permissions, icons, etc., which shall be global for the whole app Setup special settings, like debug/release store API's, Google maps debug/release API's, etc. in the respective configurations Fixes and workarounds Add the old units and datamodules (I try to minimize these in my projects, so I usually have to add only one main form), and try to restore the old project state Refine and check the settings, and ready to debug, test and deploy This way I evaluated for myself that I have best control over all settings (and there are many which could go wrong in the cross-platform world). Is there probably a better way to automate this process ( ! but please consider that many features might have large incompatibilities from 10.3.1 to 10.3.2), I don't really trust automatisms when it comes to such sensitive data, and when too many changes are there. Do I miss something, is there a more easy "migration tool" out there ? Would be great to hear how you do this usually, and which tools you use.