Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Hans♫ last won the day on January 29

Hans♫ had the most liked content!

Community Reputation

38 Excellent

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Is there a confusion between "App Store" and "Mac App Store" somewhere? The error message contains both "Mobile" and "App Store", which refers to iOS, not MacOS. Our App is on Mac App Store now, though we use our own shell scripts to sign and build the final application package.
  2. Hans♫

    AddFontResource/Ex not working on some machines

    On Firemonkey there is a problem loading fonts dynamically, so maybe its related to that? https://quality.embarcadero.com/browse/RSP-16207
  3. I haven't investigated their REST API, so I don't know how much functionality it implements compared to the SDK.
  4. I didn't answer this one because the steps to include the FB SDK is pretty much the same as mentioned in the GRIJJY blog. Though I never needed to fix anything regarding Delegates, so depending on your needs, this pretty long part can be skipped. Also, my first implementation of the FB SDK was made in 2015-16, before anyone else had published solutions for it. My implementation is much simpler and focus only on the areas that I needed my self. Therefore it is not compatible with the GRIJJY source code. However, @MikeMon I'll be happy to share my headers and units to implement the Facebook API.
  5. Thanks Dave, it solved the problem! I added the fake includer function to the FB SDK headers as you suggested: procedure CLangRTLoader; cdecl; external '/usr/lib/clang/lib/darwin/libclang_rt.ios.a'; Now it links with the FBSDK 4.36 without problems, and after a few hours of work to adapt my code to the new API version, everything works! (I didn't try newer versions for now, as they might require further updating of my code and headers)
  6. Hans♫

    Just wanted to brag a bit :-)

    It's all native. We use the TMS iCL components for the GUI, only the screen instruments are custom FMX components, wrapped by a FMX wrapper.
  7. Thank you, I will have a look.
  8. Hans♫

    Just wanted to brag a bit :-)

    Thanks 🙂 I don't think that our FB activities have had any influence on Apples decision to feature EarMaster. From my point of view, FB advertising is useful if you have a free app and it targets something that people have a personal interest in. When you are viewing you FB news thread, you are not in "commercial mode", but instead you can easily be attracted by an add about something you are passionate about. It's however important to submit all in-app purchases to FB, so you can calculate the ROI, which is what we mainly use our FB integration for.
  9. Yes, we released a new build 2 weeks ago, which is the first one made with Delphi 10.3.3. So far the crashes are lower than the build with Delphi 10.3.2. In return, the new build has been featured on App Store, so I believe that Apple is quite satisfied 🙂
  10. Hans♫

    Just wanted to brag a bit :-)

    Thanks! - and great to know that its in Germany too 😄
  11. Our iOS app, EarMaster, made with Delphi is now featured in App Store, in the "Best of the month - New apps we love". Nice to see that a Delphi app can get this kind of approval from Apple. PS. I am in Denmark, so I see the Danish app store, but I am curious to know, in what other countries it has been featured too?
  12. Yes, I have seen it and it looks great. It could probably have helped me in other situations. However, my problem in this post was not that I couldn't find where it crashes. The problem was that it happened in random places, though always when allocating an Objective-C wrapper.
  13. Hans♫

    AV with InApp purchase on MacOS

    Thanks a lot Dave for looking into this! I removed the [Weak] attribute in the test program, but it still crashes regularly, though it does seem to increase the probability of success. When I have a successful request and then perform the same request again, then I also get an AV. It seems like the AppStore request messes up some memory. Sometimes it is in an area that prevents us from finishing the request, and sometimes it is a different place that will allow a successful request, but will cause problems later. Also, if I run the test program directly from the ScratchDir on the Mac, then it is never successful and crashes every time. It's strange that the Objective-C wrapping seems to work all other places, but not here...
  14. Hans♫

    AV with InApp purchase on MacOS

    Maybe this is a bug in the OSX64 compiler? I have attached the small test project that produces the error. It should compile and run out of the box. Are there someone out there with the knowledge needed to look into this, that I could hire to solve this? I see only two outcomes: Either some code in the test project can be changed to solve it, or a bug report should be filed to Embarcadero. MacInAppTest.zip
  15. Hans♫

    AV with InApp purchase on MacOS

    The FMX.InAppPurchase component already implements in-app purchase for iOS, and since OSX uses the same StoreKit library, I simply added an OSX copy of the iOS implementation and adjusted it to "work" on OSX. It works as far as it compiles and runs, and I can call "QueryProducts", which also initiates a Delegate callback. Once in a while I can even successfully read the product details from App Store that I receive in the callback, but most of the time the callback fails with an AV. It seems to be random where it fails. If I restart paserver before each run I can increase the chance that it works, but except from that I did not find any correlation between changes I have made and a successful request. The testprogram works fine on iOS. On OSX I have tried to target both Mojave and Cataline, and both 32 bit and 64 bit editions. They all fail. As the OSX code is the same as the iOS code, I guess that the problems are related to differences between the iOS and the OSX target in the Objective-C handling and wrapping. Any ideas what could be wrong, or what I should try? (or maybesomeone with more knowledge about Objective-C wrapping and the inner workings of Delphi could help me with this?) Below are some extracts from the code in my new unit "FMX.InAppPurchase.Mac". My test program creates TiOSInAppPurchaseService and call QueryProducts. It works without errors, and a few seconds later the TiOSProductsRequestDelegate.productsRequest callback is called. From here random AV's happens. Usually it fails on the first line FIAPService.FProductList.Clear, and sometimes it fails earlier in "DispatchToDelphi" or later in one of the following lines. TIAPProductList = class(TList<TProduct>) end; procedure TiOSInAppPurchaseService.QueryProducts(const ProductIDs: TStrings); var ProductIDsArray: NSMutableArray; ProductIDsSet: NSSet; ProductID: string; begin ProductIDsArray := TNSMutableArray.Create; for ProductID in ProductIDs do ProductIDsArray.addObject(PStrToNSStr(ProductID)); ProductIDsSet := TNSSet.Wrap(TNSSet.OCClass.setWithArray(ProductIDsArray)); FProductsRequest := TSKProductsRequest.Wrap(TSKProductsRequest.Alloc.initWithProductIdentifiers(ProductIDsSet)); ... FProductsRequest.setDelegate((FProductsRequestDelegate as ILocalObject).GetObjectID); FProductsRequest.start; end; constructor TiOSInAppPurchaseService.Create; begin ... FProductsRequestDelegate := TiOSProductsRequestDelegate.Create(Self); FProductList := TIAPProductList.Create; end; constructor TiOSProductsRequestDelegate.Create(const IAPService: TiOSInAppPurchaseService); begin inherited Create; FIAPService := IAPService; end; procedure TiOSProductsRequestDelegate.productsRequest(request: SKProductsRequest; didReceiveResponse: SKProductsResponse); begin FIAPService.FProductList.Clear; ... end;