Can I debug iOS app installed from IPA archive?

前端 未结 3 1074
醉梦人生
醉梦人生 2020-12-24 15:08

I m having some problem with my app which reproduces only when i install it ad hoc, but doesn\'t reproduce if i just run the app from Xcode. I would like to debug this prob

相关标签:
3条回答
  • 2020-12-24 15:40

    I was struggling with the same problem, and just launching my app from Xcode was not an option - I had to build the IPA, sideload it on an iOS device, and then debug. Eventually I was able to make that work with the following steps:

    1) Set the scheme archive target to Debug

    2) Change the following settings for the Debug builds

    • Keep Private External Symbols (KEEP_PRIVATE_EXTERNS) : YES
    • Enable Bitcode (ENABLE_BITCODE) : NO
    • Strip Linked Product (STRIP_INSTALLED_PRODUCT) : NO

    3) Rebuild, archive, and deploy the resulting IPA file to your iOS device.

    4) Launch the app, and in Xcode, select Debug/Attach to Process/YourAppName(id)

    5) Break into the debugger - you should be able to see the code, put and use breakpoints, etc.

    If you want to debug your code from the very beginning, just put a loop that sleeps for a second or two and then checks a flag at the top of your main function - when you break into the debugger, just change the flag to let it escape the loop.

    0 讨论(0)
  • 2020-12-24 15:47

    You don't have any debug information for the app at this point, and since most apps are pretty thoroughly stripped, there won't even be symbols for lldb to hook on to. So we're not going to be able to successfully set breakpoints.

    When you built the app, Xcode produced a dSYM file (MyApp.app.dSYM) which has the debug info in it, so all is not lost. Problem is when you attach to some - to Xcode - random app on the device, Xcode has no way to know where to find its debug info.

    You can add the debug info into your debug session in lldb by using the command:

    (lldb) add-dsym <PathTo.dSYM>
    

    You have to do this after you have attached.

    lldb also uses SpotLight to find dSYM's so if you put the dSYM somewhere that SpotLight knows to search (like your Desktop or a folder under your User directory) then lldb should pick it up automatically.

    You can tell whether lldb has successfully read in the dSYM by doing:

    (lldb) image list <AppName>
    

    If lldb found the dSYM, it will list the path to it on a separate line after listing the path to the AppName binary.

    0 讨论(0)
  • 2020-12-24 15:56

    Jim Ingham, thanks for your answers.

    I found the reason why i was unable to debug into static libraries. In each Xcode project, there is a setting called "Strip Linked Product" under "Deployment" section. In all my projects this setting was set to "Yes".

    In order to debug into static libraries for an app built by archiving, i set this setting to "No" in each dependent library project (as well as the main project). This can also be set differently for Debug/Release modes. After this, i see the library symbols built during archiving and i m able to debug into library code. I hope this helps someone.

    Unfortunately (or maybe fortunately) the bug i was trying to debug no longer reproduces when the library symbols are not stripped. Maybe something happens when the symbols are stripped, i will need to investigate further.

    0 讨论(0)
提交回复
热议问题