Jump to content

Rollo62

Members
  • Content Count

    1674
  • Joined

  • Last visited

  • Days Won

    22

Everything posted by Rollo62

  1. Rollo62

    10.3/10.4 Debug iOS?

    I had the same when testing my projects with 10.4. But it turned out that I forgot to clean and build a designtime package, which used an already changed unit. Since I don't use too many designtime packages, this was easy overseen, and I wish there could be some reliable "out-of-date" warning. Sometimes the llnker makes a warning, sometimes not. So far I seldom see such mis-aligned breakpoints, and usually cleaning up all DCU's help to fix it. I also recomment, like Dave, to install into a new VM. Since I did this, some years ago, I seldom have such weird failures I can see here in the blog. I think worst idea is to install two versions side by siide, there are simply too many positions where things may go wrong. Usually I have two different VM (VM10.3.3; VM10.4), which I can use even in parallel if I ever need that.
  2. Is that helpful somehow ? Not sure if this is still actual. Or the commercial TMS CLoud Pack. But I would always check if this is still currently working, the cloud APIs change too frequently.
  3. Exactly, to find something is not very reliable or convenient, with Rx10.4 LSP this is getting somewhat better in the right direction, but not perfect. Maybe Uwes MMX-Tool fills that gap, but I'm still learning howto use it at best. Still I'll do a lot of intensive "search and replace" with external tools, which gave me much better feeling of reliability.
  4. I've just run the patch, here a list of whats going on: Before install I had TChart and all Features I installed via welcome page this seems to be just a shortcut to the GeitManager Got the first message Yes, I want ... Then I've got a fullscreen terminal, which is odd. because I cannot see a hanging message-box request, it was behind the terminal. After pressing OK, it moved on Seems to de-install all features I've had installed before even Interbase and all SDK's ... Then its restarting the IDE Of course something is missing now, need attention later ... Then the features components 2nd page were all removed (as they were uninstalled), I had to enable them. Even the samples. Installing the components ... tea time ... Re-Installing also loads the TeeChart, I hope this is the new version then. I will see later in my tests. Finally after install Teechart is back I can compile Android, so also the SDK seems to be back, but I'm unsure if all Android-Components wer initialized. The welcome page still shows a patch, it seems to be an error in "patch installed" detection I re-enabled my TChart usage in a project, and compile the project for test. I found a few issues then: 1. The message box was hiding behind the full-screen terminal 2. All features were disabled and de-installed, even the samples. This is maybe for safety, but I think this could be optimized. 3. When IDE ist startin, to re-install, it noted about missing BPL Surely this could be optimized too, to set the IDE into a kind "installer mode" before, ignoring missing BPL. Then only show message after 2nd start, if still anything is missing. 4. Patch "installed" detection doesn't work reliably
  5. So howto get TeeChart back ? Did I understand right that this works with Manage platforms, and uncheck/check the TeeChart checkbox, to uninstall/reinstall TeeChart ? My point is that I don't want to re-install the whole IDE at the moment, since I'm fighting to get things stable again. I've deactivated the TChart in my app for testing purposes.
  6. Thanks Uwe. I also will follow the good advice to backup the system, especially because the name of the "patch" doesn't sound too reliable to me.
  7. Thanks for pointing my head to the Patch tool. Is this an official patch, or not, why this crazy name ? What I don't really understand is what this has to do with TeeChart. I have currently similar issues, linking to TChart is broken. Is this Patch Tool of any use, or is this just an internal test of Embarcarero before launching the real Patch-2 ? Is there any available Readme BEFORE installation ?
  8. I can see also benefit in maintaining code. Imaging you change TItemArray = TArray<TItem>; to TItemArray = TArray<TItemEx>; In the TItemArray version you touch the code in one place only. In the TArray<TItemEx> version you touch the code in thousands of places maybe.
  9. Rollo62

    TeeChart & Delphi 10.4?

    Now it hits me too while testing, I hope I can add this in the same thread here At least the title makes the subject clear. I've got the error Maybe I installed too early, and now the setup included a newer, compatible version ? I think it should be available already at Steema. But how can I update this in my Rx!0.4.0 installation: GetIt - no Do I have to wait until Patch2 arrives ?
  10. Rollo62

    TeeChart & Delphi 10.4?

    Not sure where you lost your TChart. But I think its worth to make clear that you have to check the TeeChart checkbox in the WebInstaller, to have this available directly after installation. Usually I check everything in the WebInstaller, so I'm sure it will be installed in right order and nothing is missing later on.
  11. Hi there, I'm still fighting a little with Rx10.4 Patch 1, to get my projects smoothly running. Since debugging is somewhat broken for me, I regularily got out-of-system-ressources message, and also had some other exception that I haven't not seen before. The apps are running, but I think I better don't put them productive already. Unfortunately the Apple deadline for storyboard comes closer. Since Rx10.3.3 was quite stable for me, I came to the thought above. I think that should be possible to let .storyboard generate by Rx10.4, and then include this somehow in Rx10.3.3. Probably including in the Deployment and fumbling in the "%storyboard%" entry in the plist is good enough, but I doubt that its so easy.. I'm loosing a lot of time right now by testing and trying to get my projects as stable as before, maybe someone got similar idea and already tested this to prevent Apples deadline. Would be nice if you could share your experiences. By the way: Also the Rx10.4 .storyboard has some issues, as my logo did appear much too small, but that would be acceptable in the worst-case. Also changing background color has the known issues, which needs to re-boot the phone before getting fixed. I had not enought time to check it more deeply yet, but I just replaces the original icons by my own of same size. Maybe thats not good enought, and I need some special graphics format ?
  12. Thanks Chris, this secret was well hidden I will check that.
  13. My hope is that just copy the storyboard and edit info.plist is enough. What else should be missing ? Rx10.3.3 was rock solid for me, Rx10.4 is still fragile and Im working on it.
  14. Hi there, I have a very nasty problem again with BLE background mode. Since I have the feeling that I have read all available articles and references about this topic worldwide, I still got no clue howto get this working. All is working as expected under forground mode. I hope that I can find some help or new ideas from here, because my head is going to be empty right now. My setup is: Rx10.3.3, XCode 11.4.1, iOS13.4.1, modern iPhone/iPad devices, all running fine with debug and release My task: I need to connect external Bluetooth LE peripherials, which works well in foreground. They send data string (20 bytes) via unspecific custom characteristics, and I receive a HEX string, all that is fine. With integrated logging functions in the app, I can monitor all behaviour in fore- and background. Also debugging in fore- and background is no problem. The devices send new datastring every < 2 sec., and the other every < 12 sec., anyway, both get killed after a while. Maybe there are some restrictions in the datarate, I have read somewhere that peripherals > 2 sec. might considered to be killed (?), but I cannot find anything about that in the official docs (also not much in the forums, seems only one case). The connected devices stay connected, I cannot see any unusual behaviour, moreover I test with three different hardware types, all behave same. So the issue seems not to be caused by the peripheral hardware. I use the following settings: Background modes: audio, bluetooth-central (audio is used for Tts text-to-speech also in background, but its not used currently when receiving the data sting). Info PList NSBluetoothPeripheralUsageDescription (deprecated, but shouldn't it be there for older devices ?) I didn't see any hint that this might be harmful. NSBluetoothAlwaysUsageDescription (defining both should be any problem, right ?) Permissions FMLocalNotificationPermission = true; Location: I do not use that, since Apple rejected this once, for adding an "unused background operation". Some time before I added this background location as workaround to keep background mode permanently running. I've made also some experiments before to add bluetooth-peripheral mode, as workaround to keep background mode permanently running. Both workarounds should be not necessary, but I was searching for a stable way to keep background active. I touch the location in foreground, so that the Location permission alert appears to the user,, since I think that location might be relevant for Bluetooth as well, same as is under Android. But I don't use Location in foreground, but in the past it seems that location permission alert seemed to help keeping background active.. When I take the location out completely, then also the Bluetooth LE permission alert seems not to appear every time, so sometimes BLE stays unavailable, and I need re-install to fix that problem. Thats why I touch the location in foreground, to enable location, and then I don't use the location any more, but BLE works with that approach in foreground. Device capabilities: I don't set specific BluetoothLE capabilities (UIRequiredDeviceCapabilities - bluetooth-le), as I never had to, and it works in foreground. Application events, I handle all of them, and especially at WillEnterBackground I stop some unneeded timers and delay the Threaded ringbuffer for receiving and processing the data, by TThread.Sleep(500);. (I used this sleep method before, and it seem to work well under older iOS, but I never checked that too deeply). on BecameActive I restart the timer and threads With TThread.Sleep(500); I throttle the thread which processes the incoming data (there is no data overflow, datarate is too small). I can see the processed incoming data, also in background, the ReadCharacteristic appends the data to the ring buffer, and then every 500ms the thread still seems to run and process this. In background I stop running timer, and I can see data from the periperal coming in. So far, so good, but longer operation (> 1min, > 10min) might kill the app in background. With kill I mean, its not only in background stopped, but the app is killed and restarts fresh. There is no other resource shortage, enough memory, etc., no need to be killed IMHO. I don't see any place where my app could get stucked, so that Apple might push me out of business, I tried to implement all measures to keep everything lightweight, asynchronously, only the threaded ringuffer sleeps for 500ms every cycle. I can see the data package running through the process handler, even debugging in background is possible. Please let me know if you have some helpful hints here, because I got stucked a while now by this issue, I'm at my wits end right now.
  15. I have done some more tests, but cannot really say that I know whats going on here. Maybe I point out some more facts I can see: - The app works fine in foreground (FG), and may crash in (BG) - The BG crash occurs when the phone looses the IoT device, while connected in BG all is fine. - The BG crash never happens in my office, I can even move out-of-range while the IoT gracefully disconnects, and can be reconnect after that (while app in BG can be opened, its not a new start). - The app in BG can send a notification when disconnect, all this is OK. - When connected in FG, I can move about 15m, still the connection keeps active (no disconnect, no crash) When connected in BG, when I move 15m, the connection gets disconnected (no crash). - It seems that BG operation uses maybe less energy or less QoS All that would be OK, only - in some critical places the same app on same phone crashes directly when entering BG these places are offices where a lot of RF noise can be seen (about 50 BLE devices in the scan, manye WiFi devices, ...). - these places contain many surrounding IoT devices, like smartwatches, several nearby (< 50m) WiFi company routers - in normal places, I also have about 20 IoT devices, and some WiFi devices nearby, but maybe not that many as in above. What happens in those critical places is - The app works fine in foreground (FG), and crash directly when entering (BG) - No notification is sended before, means OnDisconnect is not normally fired - The app cannot really be logged, as it can be in normal places When I make experiments with different IoT, one 2sec, one 12sec., both are two different devices, so maybe also they have other different settings. The interesting I can see in the critical places: - the 2sec. device work in BG, no crash - the 12sec. device shows all negative behaviour from above This leads me to the question: Does the iOS Phones switch to different power-mode, or energy-saving mode, when the data rate is lower (e.g. < 10sec.) ? This would be my only explanation for the odd behaviour, that a fast sending device keeps iOS more active (maybe within the 10 sec. range), so the Phone has better capabilities to keep the connection. Is there any paper or site from Apple that would explain such behaviour ? I have searched the web deeply, but I have not found any matching info to my assumption, maybe there is some help out there ? This is interesting reading https://github.com/opentrace-community/opentrace-ios/issues/4 Also regarding background state restoration. I have not implemented that, but of course that may help, but its not supported in FMX. I've put this questions also as double-post into the German DP.
  16. Rollo62

    ANN HTML Library 4.1 released

    aaaand, what is the state of CSS Grid, would be also nice to have (didn't checked the current version, but I doublt it in right now).
  17. Yóu can draw like this. But the Canvas is a raster-based area, which doesn't contain graphical objects. So the only way would be to re-paint the objects, as you like. Usually this is done via FrameBuffer bitmaps, where you can do the clearing and drawing, and then paint the whole frame buffer to the canvas each frame (or when changed).
  18. Hi there, I'm looking for ways to create a simple short-time timer under iOS. via LocalNotifications: One possibility is to use LocalNotifications, but its not much customizeable, nor to make it prominent. Also it seems not to be too reliable via PushKit: that looks more interesting, but I'm afraid that all notifications (even the 15 sec. timer) has to be launched via Apples APNs server. via Calendar system: The Apple doc say that this is not the right way anyway, but to use the EventKit Calendar and EKEventStore. https://developer.apple.com/documentation/eventkit To access the EKEventKit would mean that the app needs calendar permissions Which is quite heavy requirements for a simple timer notification, of <= 2h. But at least with that I could possibly change the alarm sound. The alarm would then be handled from the central calendar app of the phone, I think that this also will open my app via LocalNotification, under the right condition, when user presses the open button. Moreover, I'm not sure if this adds an visible event in the calendar, what I don't want. But I think there should be ways to hide/delete an invisible event, but Apple docs, see note below, restricts that. There are some old calendar examples already in the D.P.F. component suite, the first 3rd party componentes of FMX, as far as I know. I think they are a little outdated by permissions now, but maybe basically still OK. The URL is deprecated, it shall use EMailAddress instead. Which also sets Sound to nil, and doesn't seem to be able to open an related app. Via EventKit this is maybe still possible, maybe with the EventStoreChanged, with a lot of overhead (see note below). Is there any lighter middle way: Two notes from Apple docs: My question is if there is maybe a middle way, or an extension to the LocalNotification, to allow a simple alarm timer running without too much permission requests or overhead ?
  19. I found some API to customize UserNotifications UI, not looked too deep into it, but maybe that could do what I want. At least the UI customization part.
  20. Rollo62

    Record and process audio

    Maybe you'looking for something like AVAudioEngine, as the blog said, this is much more tricky API, I wouldn't count that FMX can do that out-of-the-box. https://developer.apple.com/documentation/avfoundation/avaudioengine If not in the FMX library, then have a look at FmxExpress headers.
  21. Rollo62

    Record and process audio

    Don't think to difficult, its all in FMX. Uses , FMX.Media var FMicrophone : TAudioCaptureDevice; // get the microphone device FMicrophone := TCaptureDeviceManager.Current.DefaultAudioCaptureDevice; FMicrophone.FileName := AFileName; // GetAudioFileName(AUDIO_FILENAME); try if Assigned( FMicrophone ) and ( FMicrophone.State = TCaptureDeviceState.Stopped ) then begin FMicrophone.StartCapture; end; except on E : Exception do begin LTxt := E.Message; end; end; And you have to provide the NSMicrophoneUsageDescription in the version info.
  22. @Dave Nottage Yes "short time" means about 30sek ... 2h max., typically around a few minutes), while it should do the following 1. at least show a notification alert (this works also in normal FMX)- 2. it should exchange the default "bling" sound with another short ringtone (Edit: Finally I found my issue with SoundName, it shall not include the full absolute path, only the filename, see references below) 3. maybe recurring alarms, if the user doesn't react at first note (this should work with normal FMX to) 4. recurring alarms with a specific delay (this should work with normal FMX too, it seems only a range can be set (sec,min,h,...), not e.g. 20 sec. ?) 5. better to have a "customized" looking notification, which looks like a custom popup 6. while this notation popup stays a little longer visible than normal notification 7. best of all if it would wake and notify the app in the background, also before the user presses the button (I think this is probably not possible under iOS) 8. the notified app could possibly start a text-to-speech voice in the background, before the user clicked, explaining additional info to the user I think not all from my wishlist is possible, but I try to get as far as I could. I have checked also with your KastriFree implementation, with what I did the following: create a .caf file from .mp3 via "afconvert", doing the following steps: copy Snd_Bell_001.mp3 to ~/Downloads cd ~/Downloads cd /Users/username/Downloads afconvert -f caff -d LEI16 '~/Downloads/Snd_Bell_001.mp3' '~/Downloads/Snd_Bell_001.caf' add the .caf file to the ressources, to put them in iOS on iOS I create sub-folder /Library/Sounds and copy the .caf file to there, as described here (maybe I may skip the file copy to /Sounds, and use the file directly from the bundle, but I can check the right paths later) The sound file works in forground, what I could test when playing it with mediaplayer When creating a scheduled notification, I have to use the SoundName as filename (e.g. "tone.caf") only, it shall not include the full path. Edit: Only then iOS is searching in all the places above, for the SoundName. So I can confirm that your UserNotifications in KastriFree implementation work well so far. I think an app can get until step 2./3. so far, but all above that will be not possible (at least I can see no way to do it). Maybe there are other hidden APIs, or new idea, in iOS that could do it, but I cannot find them.
  23. Hi there, I have seen already a few blogs talking about the new feature internals of the coming Rx10.4 release: https://www.delphiworlds.com/2020/05/its-time-to-get-excited/ https://blog.marcocantu.com/blog/2020-may-per-control-styling.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+marcocantublog+(marcocantu.blog) https://www.uweraabe.de/Blog/2020/05/15/delphi-10-4-leverages-vcl-styles/ https://dalijap.blogspot.com/2020/05/delphi-nullable-with-custom-managed.html https://community.idera.com/developer-tools/b/blog/posts/new-vcl-tedgebrowser-component-coming-rad-studio-10-4 https://community.idera.com/developer-tools/b/blog/posts/adopting-the-openjdk-for-delphi-android-development I hope this is ending the long, long favorized age of "SORRY, I can't say anything, because of RadStudio Beta NDA will kill me and eat my soul". Hurray: That is a very good step in the right direction, open information instead of information hiding I'm with it, and this gives all customers an early insight in the new features they might have been waiting for, in a more technical perspective rather marketing. We trust our MVP's to give good advices, that also lead to make decisions about prolonging our subscriptions (so there is a little marketing inside anyway, thats fine).
  24. 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.
  25. @Remy Lebeau You are talking about Android, thats all true. But my question was especially regarding iOS, where things are very much different. https://stackoverflow.com/questions/11044095/ios-keep-an-app-running-like-a-service The background mode in iOS can be kept active only by those few background modes available, like Audio, Bluetooth, Location, etc. My goal is too keep some background activity, like a alarm timer, if none of the above is active. If the timer has ended, then a special alarm tone and speech might occur, together with a local notification. I do use timed local notifications, to wake up the system right now, but the Tts and audio works not always reliable. The most reliable way to keep threads running so far I found is the Bluetooth-periperial background mode, where the app itself may act as BLE device, also in background. That may keep iOS active, but if you never need that "peripheral", only to keep it up, then Apple will ask you to show and explain where you need this mode probably. I think a possible way would be to introduce some "function", that can be shown, but may never be used in practice.
×