Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by Hans♫

  1. When I target iOS 12 I get linker errors related to the Facebook SDK, while linking towards iOS11.2 works fine. I hoped that Delphi 10.3.1 fixed it, but it didn't so now I ask here. What can it be? I am using: Delphi 10.3.1 XCode 10.1 (10B61) SDK iOS12.0 The SDK is included by setting "Options passed to the LD linker" (in: Project Options > Building > Delphi Compiler > Linking) to "-ObjC -lz -framework FBSDKCoreKit -weak_framework Bolts" The errors I get with different versions of the Facebook iOS SDK: FBSDK 4.40 (latest SDK) Error: "___isOSVersionAtLeast", referenced from: -[FBSDKApplicationDelegate application:openURL:options:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o); -[FBSDKApplicationDelegate application:openURL:sourceApplication:annotation:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o); -[FBSDKApplicationDelegate applicationDidBecomeActive:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o); ___51-[FBSDKApplicationDelegate openURL:sender:handler:]_block_invoke in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o); -[FBSDKApplicationDelegate openURLWithSafariViewController:sender:fromViewController:handler:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o); -[FBSDKWebDialog _applicationFrameForOrientation] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKWebDialog.o); -[FBSDKPaymentProductRequestor logTransactionEvent:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKPaymentObserver.o); ... FBSDK 4.36 Error: "___isOSVersionAtLeast", referenced from: -[FBSDKApplicationDelegate application:openURL:sourceApplication:annotation:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o); -[FBSDKApplicationDelegate applicationDidBecomeActive:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o); -[FBSDKApplicationDelegate openURLWithSafariViewController:sender:fromViewController:handler:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o); -[FBSDKPaymentProductRequestor logTransactionEvent:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKPaymentObserver.o); FBSDK 4.15 It works, but this SDK version is deprecated.
  2. Yes, I am using an empty app to test it. It only contains a few lines that uses the FBSDK. This is the code. It calls the "ActivateApp" function and tries to show a Facebook Link Sharing Dialog on iOS. But it fails in the linking process (with the errors mentioned earlier), so the code never executes. Note, I had to add some Objective-C classes to the Grijjy unit, as it did not include all the ones I need (the modified unit is attached): uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, iOSapi.UIKit, iOSapi.Foundation, Macapi.Helpers, Grijjy.FBSDK.iOS.API, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs; type TForm1 = class(TForm) procedure FormShow(Sender: TObject); end; var Form1: TForm1; implementation {$R *.fmx} function GetRootViewController: UIViewController; begin //Get the main window to be the parent of the facebook window (First window is always the main window) Result := TUIWindow.Wrap(TUIApplication.Wrap(TUIApplication.OCClass.sharedApplication).windows.objectAtIndex(0)).rootViewController; end; procedure ShowShareDialogMode(aContent: Pointer); var lFBSDKShareDialog: FBSDKShareDialog; begin lFBSDKShareDialog := TFBSDKShareDialog.Create; lFBSDKShareDialog.setshareContent(aContent); lFBSDKShareDialog.setFromViewController(GetRootViewController); lFBSDKShareDialog.setMode(FBSDKShareDialogModeNative); if not lFBSDKShareDialog.canShow then //if FB app not installed, fallback to web access lFBSDKShareDialog.setMode(FBSDKShareDialogModeFeedBrowser); lFBSDKShareDialog.Show; end; procedure ShareLink(const aLink: string); var lLinkContent: FBSDKShareLinkContent; begin lLinkContent := TFBSDKShareLinkContent.Create; lLinkContent.SetcontentURL(StrToNSUrl(aLink)); ShowShareDialogMode( NSObjectToID(lLinkContent) ); end; procedure TForm1.FormShow(Sender: TObject); begin TFBSDKAppEvents.OCClass.activateApp; ShareLink(''); end; Grijjy.FBSDK.iOS.API.pas
  3. That is really strange. I wonder what difference we have in our configuration that causes this error to happen for me and not for you? Would it be possible that you make a screen shot of your Project Options? (the "Compiling" page and the "Linking" page)
  4. I tried to use the Grijjy implementation that you linked to earlier, but I still get the same linker error: ___isOSVersionAtLeast", referenced from: -[FBSDKApplicationDelegate application:openURL:sourceApplication:annotation:] in Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o); However, I just realize that you do not mention your iOS SDK version. I only have the problem with iOS 12, not with iOS11 and earlier. What iOS SDK do you use?
  5. Our software has been using the EldoS AES unit (128 bit key and ECB), to encrypt data stored locally on the users computers (binary data stored in a stream). Now on a 64 bit target, this library no longer works, but our software should still be able to read existing data on the client computers, even when it is the 64 bit edition of our software running. This leaves us with two options: 1) Make the EldoS AES encryption/decryption work with 64 bit. 2) Find another library that can decrypt existing data correctly Add 1: Did anyone convert it to work with 64 bit? It uses some pointer tricks, for example: SomeLongWordVar := PLongWord(@InBuf[0])^ to convert 4 bytes from an array of byte (InBuf) to LongWord. Not sure if that would work in 64 bit. Add 2: I quickly tried to decrypt with Lockbox 3, but get the error: "Invalid ciphertext - block padding is corrupted". Maybe I am using it wrong, but it could also be they are not compatible. Any suggestions what I could use or do to read the old encrypted data from a 64 bit application?
  6. I am using a Delphi beta under an Embarcadero NDA, so I suppose I cannot reveal what 64 bit target it is 😉
  7. That did the trick! I searched and replaced all occurences of the text "LongWord" with "Uint32" and now it works. Thanks for the input.
  8. It is declared as a TAESBuffer: TAESBuffer = array [0..15] of byte; I would actually expect that trick to work on 64 bit, but I don't know. It was just an example of the code. All I can say is that the total encryption and decryption produces different results on 64 bit than on 32 bit. The reason could be very simple or very complex, but I thought I would first ask here to hear other developers experiences, before I spend more time trying find a way through.
  9. We use it for two things: 1) Allow users to share their achievements in our App on Facebook 2) To report all our in-app sales to Facebook so the ROI can be calculated for our Facebook Ads.
  10. That sounds great. What version of Delphi, XCode and iOS-SDK do you use?
  11. No one using the Facebook SDK in an iOS app? If it works for you, please let me know, then at least there is hope...
  12. Our iOS app made with Delphi showed an alarming increase of crashes with the latest update, that was built with Delphi 10.3. So I made this graph in "App Store Connect" that shows a similar increase of crashes when upgrading to Delphi 10.2.2. This is a bit scary... where will it end... Graph shows crashes per week: The vertical gray lines shows when we released a new update of our app. The number of sessions per week is almost the same during the whole period, so that does not influence the graph. Unfortunately I don't remember what version of Delphi I was using before the 10.2.2 upgrade.
  13. Our MacOS app has 20.000+ users (in addition to the Win and iOS users). Each of those had to confirm the message from MacOS that they are using an outdated app... Looking very much forward to the 64 bit compiler!
  14. Exporting my 10.3 settings before upgrading to 10.3.1, the Migration tool shows the text "Generating the migration file... Access is denied" What can it be?
  15. Hans♫

    Migration tool: Access is denied

    Excellent point! - You are right, I just typed in a file name without specifying the path, and that was the reason. After having specified a destination filename WITH path, it works fine! Thank you for pointing me in that direction.
  16. Thank you for your persistence Dalija. I have a heart for Delphi too, and I somewhat regret that I posted the image, because I still have no proof if it is our code or Delphi code that fails. With the graph I am basically bashing 10.3 RIO because I am tired of its quality. Our database access uses exactly the same code on Windows, Mac and iOS. No crashes detected or reported on Windows and Mac. But as you said, iOS is just waiting for a reason to take your app out. It is a lot more strict on everything.
  17. I investigated all recent crash reports delivered to XCode for the app. The majority of the crashes contains a reference to a sqlite file in our app and "Code 0xdead10cc", which means "terminated by the OS because it held on to a file lock or sqlite database lock during suspension" The positive news is that the user will not discover the crash because it happens when it enters suspension state anyway.
  18. Ha, ha, we only release an update when there is nothing new, nothing fixed and absolutely no change in the code 😉 The graph is no proof, but its an indication.
  19. Its just a screen dump from App Analytics in App Store. I did not make the graph, Apple did: The graph is not a scientific proof that those Delphi versions are the cause of the leaps, but it is interesting that both leaps happened exactly at the same time as upgrading the Delphi version. Except for 10.3 Rio, I am still very pleased with Delphi as it allows us to share 99% of the codebase among the Windows, OSX and IOS versions of our app. BTW, on iOS we are using the native iCL components and not FMX.
  20. Yes, I have the graph by OS also, but in both situations where the the graph stepped up, it happened with the same OS. So that is not the reason.
  21. With Delphi 10.3 Rio, I have added MacOSX SDK 10.14 in the SDK Manager, which I use to build my apps. However, when I run "otool -l <binaryfilename>" on the deployed executable I get this: cmd LC_VERSION_MIN_MACOSX version 10.8 sdk 10.8 This happens also with an empty app. It is a problem because I need to Notarize the app with Apple, and it fails with the reply: "The binary uses an SDK older than the 10.9 SDK". How can I change that?
  22. Now added to Quality Portal that you cannot Notarize a Delphi MacOSX app. I found there is actually another problem too. Please vote for it: https://quality.embarcadero.com/browse/RSP-23368
  23. Thank you for your reply, but in the SDK Manager I can only set the target SDK, which is already set to MacOSX 10.14:
  24. I use ScreenService.GetScreenScale to get the Screen scaling. It was partly broken in 10.2.3, but in 10.3 it seems to be completely broken. In 10.3: No matter what scaling is set in Windows: 150%, 175% or 200%, the return value of ScreenService.GetScreenScale is 1.0. In 10.2.3 it did return the value 1.5 with 150% scaling, but with 175% and 200% scaling it also returned 1.5 I post it here before I post it as a bug in QP, in case I missed something...? This is the function where I use it (and yes it does actually call GetScreenScale): function tScreenScale.GetScreenScale: Single; var ScreenService: IFMXScreenService; begin Result := 1; if TPlatformServices.Current.SupportsPlatformService (IFMXScreenService, IInterface(ScreenService)) then Result := ScreenService.GetScreenScale; end;
  25. Thanks for the demo app. Compiled with 10.3 it gave the same result as previously - until I logged out of Windows and in again, then it worked. Apparently in Windows 10 GetScreenScale returns only the value present at login time, that's why my first experiments did not work. Later I turned on the "Fix blurred apps" setting in Windows 10 and then it returns the correct value immediately even without logging in again. That's great, so Rio 10.3 works! However, when compiled with 10.2.3 it now always returns 1.0, even if I reboot after having changed the scaling in Windows. I am going to figure out why that happens...