Start a new topic

Wikitude Unity App works perfectly on Android, but freezes on iOS 12?

Hello. We have built a Wikitude continuous-recognition app in Unity that works perfectly when built for the Android platform and installed on an actual phone. The same Unity project works perfectly within Unity on an Apple MacBook pro, but when exported to XCode and built on an iPhone, the app launches successfully but freezes after a few seconds while scanning. Some of the time, the app generates a successful recognition before freezing. A couple of times, the app un-froze after a while and briefly resumed scanning before freezing again. The Android version is running the Wikitude Unity SDK from a month or so ago (8.0, I believe). The iOS version uses the most current version of the Wikitude Unity SDK (just downloaded, version 8.1), which we found necessary because the iPhone is running iOS 12. We have confirmed that the XCode project is set for a minimum iOS version of 9, and that the Wikitude SDK.framework is set as an embedded binary. Is there something that could cause this behavior, or could it be a bug due to the newness of both iOS 12 and version 8.1 of the Wikitude Unity SDK? Thanks for any suggestions.

Hi, 


Are there any errors printed to the console before the freeze happens? If, in Xcode, you pause the execution of the app while it is frozen, can you see in which part of the code it is stuck? Is it possible for you to test on a different, possible not iOS 12 device, and see if the problem still occurs there?


Thank you,

Alexandru


Alexandru — Sorry for the delay in providing the information you requested on this. We’re just getting back to this project after the holidays.


We have upgraded our test iPhone SE to iOS 12.1, and the most recent version of the Wikitude Unity SDK.


This has significantly improved performance, but we are still seeing frequent freezes of a second or so upon execution of a scan. After a minute or two of usage, we are seeing indefinite freezes. These do not appear to be crashes, though. If we minimize the frozen app (loading the main iPhone screen), and then call the still-running app up again, it usually operates properly again for another minute or two until freezing again.


This does not happen in the Unity development environment for either the iPhone or Android environments, and the Android version runs perfectly on both a quite-new Google Pixel running Android 9, or an older Google Nexus 5 running Android 5.


The iPhone version worked very well (better than on Android), when the test iPhone was running iOS 11 with the Wikitude Unity version from last fall.


When we run the iPhone app in Xcode and view the debugger, we see that CPU usage spikes during the short freezes of one or two seconds. After a minute or two of usage, CPU usage goes up to 184% (or more), which correlates with the indefinite freezes. See the attached screen capture.


We do occasionally see crashes, after extended test sessions. Log files for those are attached.


And as requested, we paused execution of the app when it was running in Xcode and experienced a freeze. Here is the output in the debug console.


Thanks for looking into this — if we can resolve this iPhone issue, we can show this to our client and hopefully get some significant revenue for both our companies.



FrontRangeAR4PMPDev`GC_header_cache_miss:

    0x1059faf3c <+0>:   lsr    x9, x0, #22

    0x1059faf40 <+4>:   ubfx   x8, x0, #22, #11

    0x1059faf44 <+8>:   adrp   x13, 1371

    0x1059faf48 <+12>:  add    x13, x13, #0xdc0          ; =0xdc0 

    0x1059faf4c <+16>:  add    x8, x13, x8, lsl #3

    0x1059faf50 <+20>:  mov    w10, #0x60000

    0x1059faf54 <+24>:  movk   w10, #0xe4e0

    0x1059faf58 <+28>:  add    x12, x8, x10

    0x1059faf5c <+32>:  mov    w8, #0x60000

    0x1059faf60 <+36>:  movk   w8, #0xe4d8

    0x1059faf64 <+40>:  ldr    x10, [x13, x8]

    0x1059faf68 <+44>:  mov    w8, #0x2018

    0x1059faf6c <+48>:  mov    x11, x12

    0x1059faf70 <+52>:  ldr    x14, [x11]

    0x1059faf74 <+56>:  ldr    x15, [x14, #0x2010]

    0x1059faf78 <+60>:  add    x11, x14, x8

    0x1059faf7c <+64>:  cmp    x15, x9

    0x1059faf80 <+68>:  ccmp   x14, x10, #0x4, ne

    0x1059faf84 <+72>:  b.ne   0x1059faf70               ; <+52> at headers.c:63

    0x1059faf88 <+76>:  ubfx   x11, x0, #12, #10

    0x1059faf8c <+80>:  ldr    x8, [x14, x11, lsl #3]

    0x1059faf90 <+84>:  cmp    x8, #0xfff                ; =0xfff 

    0x1059faf94 <+88>:  b.hi   0x1059fb068               ; <+300> at headers.c:99

    0x1059faf98 <+92>:  adrp   x14, 1101

    0x1059faf9c <+96>:  ldr    w14, [x14, #0x680]

    0x1059fafa0 <+100>: cbz    w14, 0x1059fb0e4          ; <+424> at headers.c:108

    0x1059fafa4 <+104>: cbz    x8, 0x1059fb0f4           ; <+440> [inlined] GC_find_header at blacklst.c:210

    0x1059fafa8 <+108>: and    x14, x0, #0xfffffffffffff000

    0x1059fafac <+112>: mov    w15, #0x60000

    0x1059fafb0 <+116>: movk   w15, #0xe4e0

    0x1059fafb4 <+120>: mov    w16, #0x2018

    0x1059fafb8 <+124>: sub    x14, x14, x8, lsl #12

    0x1059fafbc <+128>: lsr    x8, x14, #22

    0x1059fafc0 <+132>: ubfx   x17, x14, #22, #11

    0x1059fafc4 <+136>: add    x17, x13, x17, lsl #3

    0x1059fafc8 <+140>: add    x1, x17, x15

    0x1059fafcc <+144>: ldr    x17, [x1]

    0x1059fafd0 <+148>: ldr    x2, [x17, #0x2010]

    0x1059fafd4 <+152>: add    x1, x17, x16

    0x1059fafd8 <+156>: cmp    x17, x10

    0x1059fafdc <+160>: ccmp   x2, x8, #0x4, ne

    0x1059fafe0 <+164>: b.ne   0x1059fafcc               ; <+144> [inlined] GC_find_header + 16 at headers.c:72

    0x1059fafe4 <+168>: ubfx   x8, x14, #12, #10

    0x1059fafe8 <+172>: ldr    x8, [x17, x8, lsl #3]

    0x1059fafec <+176>: cmp    x8, #0x1, lsl #12         ; =0x1000 

    0x1059faff0 <+180>: b.lo   0x1059fafb8               ; <+124> at headers.c:71

    0x1059faff4 <+184>: ldrb   w13, [x8, #0x19]

    0x1059faff8 <+188>: tbnz   w13, #0x0, 0x1059fb160    ; <+548> at blacklst.c:216

    0x1059faffc <+192>: tbnz   w13, #0x2, 0x1059fb010    ; <+212> [inlined] GC_find_header at blacklst.c:210

    0x1059fb000 <+196>: sub    x13, x0, x14

    0x1059fb004 <+200>: ldr    x14, [x8, #0x20]

    0x1059fb008 <+204>: cmp    x13, x14

    0x1059fb00c <+208>: b.lt   0x1059fb078               ; <+316> at headers.c:108

    0x1059fb010 <+212>: ldr    x8, [x12]

    0x1059fb014 <+216>: ldr    x13, [x8, #0x2010]

    0x1059fb018 <+220>: mov    w12, #0x2018

    0x1059fb01c <+224>: add    x12, x8, x12

    0x1059fb020 <+228>: cmp    x8, x10

    0x1059fb024 <+232>: ccmp   x13, x9, #0x4, ne

    0x1059fb028 <+236>: b.ne   0x1059fb010               ; <+212> [inlined] GC_find_header at blacklst.c:210

    0x1059fb02c <+240>: ubfx   x10, x0, #12, #21

    0x1059fb030 <+244>: ldr    x8, [x8, x11, lsl #3]

    0x1059fb034 <+248>: cbz    x8, 0x1059fb270           ; <+820> [inlined] GC_add_to_black_list_stack at headers.c:79

    0x1059fb038 <+252>: lsr    x10, x10, #6

    0x1059fb03c <+256>: adrp   x8, 1369

    0x1059fb040 <+260>: ldr    x8, [x8, #0x8f8]

    0x1059fb044 <+264>: ldr    x8, [x8, x10, lsl #3]

    0x1059fb048 <+268>: ubfx   x9, x0, #12, #6

    0x1059fb04c <+272>: orr    w11, wzr, #0x1

    0x1059fb050 <+276>: lsl    x9, x11, x9

    0x1059fb054 <+280>: and    x8, x8, x9

    0x1059fb058 <+284>: cbnz   x8, 0x1059fb280           ; <+836> [inlined] GC_add_to_black_list_stack + 16 at headers.c:79

    0x1059fb05c <+288>: mov    x8, #0x0

    0x1059fb060 <+292>: mov    x0, x8

    0x1059fb064 <+296>: ret    

    0x1059fb068 <+300>: ldrb   w14, [x8, #0x19]

    0x1059fb06c <+304>: tbnz   w14, #0x2, 0x1059fb080    ; <+324> at headers.c:100

->  0x1059fb070 <+308>: lsr    x9, x0, #12

    0x1059fb074 <+312>: stp    x9, x8, [x1]

    0x1059fb078 <+316>: mov    x0, x8

    0x1059fb07c <+320>: ret    

    0x1059fb080 <+324>: adrp   x8, 1100

    0x1059fb084 <+328>: ldr    w8, [x8, #0x680]

    0x1059fb088 <+332>: cbz    w8, 0x1059fb16c           ; <+560> [inlined] GC_add_to_black_list_normal at headers.c:100

    0x1059fb08c <+336>: mov    w8, #0x2018

    0x1059fb090 <+340>: ldr    x13, [x12]

    0x1059fb094 <+344>: ldr    x14, [x13, #0x2010]

    0x1059fb098 <+348>: add    x12, x13, x8

    0x1059fb09c <+352>: cmp    x13, x10

    0x1059fb0a0 <+356>: ccmp   x14, x9, #0x4, ne

    0x1059fb0a4 <+360>: b.ne   0x1059fb090               ; <+340> [inlined] GC_find_header + 4 at blacklst.c:210

    0x1059fb0a8 <+364>: ubfx   x8, x0, #12, #21

    0x1059fb0ac <+368>: ldr    x9, [x13, x11, lsl #3]

    0x1059fb0b0 <+372>: cbz    x9, 0x1059fb14c           ; <+528> [inlined] GC_add_to_black_list_stack at headers.c:84

    0x1059fb0b4 <+376>: lsr    x10, x8, #6

    0x1059fb0b8 <+380>: adrp   x8, 1369

    0x1059fb0bc <+384>: ldr    x8, [x8, #0x8f8]

    0x1059fb0c0 <+388>: ldr    x8, [x8, x10, lsl #3]

    0x1059fb0c4 <+392>: ubfx   x9, x0, #12, #6

    0x1059fb0c8 <+396>: orr    w11, wzr, #0x1

    0x1059fb0cc <+400>: lsl    x9, x11, x9

    0x1059fb0d0 <+404>: and    x8, x8, x9

    0x1059fb0d4 <+408>: cbnz   x8, 0x1059fb280           ; <+836> [inlined] GC_add_to_black_list_stack + 16 at headers.c:79

    0x1059fb0d8 <+412>: mov    x8, #0x0

    0x1059fb0dc <+416>: mov    x0, x8

    0x1059fb0e0 <+420>: ret    

    0x1059fb0e4 <+424>: cbz    x8, 0x1059fb1d8           ; <+668> [inlined] GC_add_to_black_list_normal at headers.c:94

    0x1059fb0e8 <+428>: mov    x8, #0x0

    0x1059fb0ec <+432>: mov    x0, x8

    0x1059fb0f0 <+436>: ret    

    0x1059fb0f4 <+440>: mov    w8, #0x2018

    0x1059fb0f8 <+444>: ldr    x13, [x12]

    0x1059fb0fc <+448>: ldr    x14, [x13, #0x2010]

    0x1059fb100 <+452>: add    x12, x13, x8

    0x1059fb104 <+456>: cmp    x13, x10

    0x1059fb108 <+460>: ccmp   x14, x9, #0x4, ne

    0x1059fb10c <+464>: b.ne   0x1059fb0f8               ; <+444> [inlined] GC_find_header + 4 at blacklst.c:210

    0x1059fb110 <+468>: ubfx   x8, x0, #12, #21

    0x1059fb114 <+472>: ldr    x9, [x13, x11, lsl #3]

    0x1059fb118 <+476>: cbz    x9, 0x1059fb14c           ; <+528> [inlined] GC_add_to_black_list_stack at headers.c:84

    0x1059fb11c <+480>: lsr    x10, x8, #6

    0x1059fb120 <+484>: adrp   x8, 1369

    0x1059fb124 <+488>: ldr    x8, [x8, #0x8f8]

    0x1059fb128 <+492>: ldr    x8, [x8, x10, lsl #3]

    0x1059fb12c <+496>: ubfx   x9, x0, #12, #6

    0x1059fb130 <+500>: orr    w11, wzr, #0x1

    0x1059fb134 <+504>: lsl    x9, x11, x9

    0x1059fb138 <+508>: and    x8, x8, x9

    0x1059fb13c <+512>: cbnz   x8, 0x1059fb280           ; <+836> [inlined] GC_add_to_black_list_stack + 16 at headers.c:79

    0x1059fb140 <+516>: mov    x8, #0x0

    0x1059fb144 <+520>: mov    x0, x8

    0x1059fb148 <+524>: ret    

    0x1059fb14c <+528>: ubfx   x9, x0, #12, #6

    0x1059fb150 <+532>: orr    w10, wzr, #0x1

    0x1059fb154 <+536>: lsl    x9, x10, x9

    0x1059fb158 <+540>: lsr    x10, x8, #6

    0x1059fb15c <+544>: b      0x1059fb280               ; <+836> [inlined] GC_add_to_black_list_stack + 16 at headers.c:79

    0x1059fb160 <+548>: mov    x8, #0x0

    0x1059fb164 <+552>: mov    x0, x8

    0x1059fb168 <+556>: ret    

    0x1059fb16c <+560>: and    x8, x0, #0x7

    0x1059fb170 <+564>: add    x8, x13, x8

    0x1059fb174 <+568>: mov    w13, #0x62d0

    0x1059fb178 <+572>: ldrb   w8, [x8, x13]

    0x1059fb17c <+576>: cbz    w8, 0x1059fb264           ; <+808> at blacklst.c:195

    0x1059fb180 <+580>: mov    w8, #0x2018

    0x1059fb184 <+584>: ldr    x13, [x12]

    0x1059fb188 <+588>: ldr    x14, [x13, #0x2010]

    0x1059fb18c <+592>: add    x12, x13, x8

    0x1059fb190 <+596>: cmp    x13, x10

    0x1059fb194 <+600>: ccmp   x14, x9, #0x4, ne

    0x1059fb198 <+604>: b.ne   0x1059fb184               ; <+584> [inlined] GC_find_header + 4 at blacklst.c:189

    0x1059fb19c <+608>: ubfx   x8, x0, #12, #21

    0x1059fb1a0 <+612>: ldr    x9, [x13, x11, lsl #3]

    0x1059fb1a4 <+616>: cbz    x9, 0x1059fb244           ; <+776> [inlined] GC_add_to_black_list_normal at headers.c:94

    0x1059fb1a8 <+620>: lsr    x10, x8, #6

    0x1059fb1ac <+624>: adrp   x8, 1369

    0x1059fb1b0 <+628>: ldr    x8, [x8, #0x8e8]

    0x1059fb1b4 <+632>: ldr    x8, [x8, x10, lsl #3]

    0x1059fb1b8 <+636>: ubfx   x9, x0, #12, #6

    0x1059fb1bc <+640>: orr    w11, wzr, #0x1

    0x1059fb1c0 <+644>: lsl    x9, x11, x9

    0x1059fb1c4 <+648>: and    x8, x8, x9

    0x1059fb1c8 <+652>: cbnz   x8, 0x1059fb254           ; <+792> [inlined] GC_add_to_black_list_normal + 16 at headers.c:94

    0x1059fb1cc <+656>: mov    x8, #0x0

    0x1059fb1d0 <+660>: mov    x0, x8

    0x1059fb1d4 <+664>: ret    

    0x1059fb1d8 <+668>: and    x8, x0, #0x7

    0x1059fb1dc <+672>: add    x8, x13, x8

    0x1059fb1e0 <+676>: mov    w13, #0x62d0

    0x1059fb1e4 <+680>: ldrb   w8, [x8, x13]

    0x1059fb1e8 <+684>: cbz    w8, 0x1059fb2a4           ; <+872> at headers.c:108

    0x1059fb1ec <+688>: mov    w8, #0x2018

    0x1059fb1f0 <+692>: ldr    x13, [x12]

    0x1059fb1f4 <+696>: ldr    x14, [x13, #0x2010]

    0x1059fb1f8 <+700>: add    x12, x13, x8

    0x1059fb1fc <+704>: cmp    x13, x10

    0x1059fb200 <+708>: ccmp   x14, x9, #0x4, ne

    0x1059fb204 <+712>: b.ne   0x1059fb1f0               ; <+692> [inlined] GC_find_header + 4 at blacklst.c:189

    0x1059fb208 <+716>: ubfx   x8, x0, #12, #21

    0x1059fb20c <+720>: ldr    x9, [x13, x11, lsl #3]

    0x1059fb210 <+724>: cbz    x9, 0x1059fb244           ; <+776> [inlined] GC_add_to_black_list_normal at headers.c:94

    0x1059fb214 <+728>: lsr    x10, x8, #6

    0x1059fb218 <+732>: adrp   x8, 1369

    0x1059fb21c <+736>: ldr    x8, [x8, #0x8e8]

    0x1059fb220 <+740>: ldr    x8, [x8, x10, lsl #3]

    0x1059fb224 <+744>: ubfx   x9, x0, #12, #6

    0x1059fb228 <+748>: orr    w11, wzr, #0x1

    0x1059fb22c <+752>: lsl    x9, x11, x9

    0x1059fb230 <+756>: and    x8, x8, x9

    0x1059fb234 <+760>: cbnz   x8, 0x1059fb254           ; <+792> [inlined] GC_add_to_black_list_normal + 16 at headers.c:94

    0x1059fb238 <+764>: mov    x8, #0x0

    0x1059fb23c <+768>: mov    x0, x8

    0x1059fb240 <+772>: ret    

    0x1059fb244 <+776>: ubfx   x9, x0, #12, #6

    0x1059fb248 <+780>: orr    w10, wzr, #0x1

    0x1059fb24c <+784>: lsl    x9, x10, x9

    0x1059fb250 <+788>: lsr    x10, x8, #6

    0x1059fb254 <+792>: mov    x8, #0x0

    0x1059fb258 <+796>: adrp   x11, 1369

    0x1059fb25c <+800>: ldr    x11, [x11, #0x8f0]

    0x1059fb260 <+804>: b      0x1059fb28c               ; <+848> [inlined] GC_add_to_black_list_stack + 28 at headers.c:79

    0x1059fb264 <+808>: mov    x8, #0x0

    0x1059fb268 <+812>: mov    x0, x8

    0x1059fb26c <+816>: ret    

    0x1059fb270 <+820>: ubfx   x8, x0, #12, #6

    0x1059fb274 <+824>: orr    w9, wzr, #0x1

    0x1059fb278 <+828>: lsl    x9, x9, x8

    0x1059fb27c <+832>: lsr    x10, x10, #6

    0x1059fb280 <+836>: mov    x8, #0x0

    0x1059fb284 <+840>: adrp   x11, 1369

    0x1059fb288 <+844>: ldr    x11, [x11, #0x900]

    0x1059fb28c <+848>: lsl    x10, x10, #3

    0x1059fb290 <+852>: ldr    x12, [x11, x10]

    0x1059fb294 <+856>: orr    x9, x12, x9

    0x1059fb298 <+860>: str    x9, [x11, x10]

    0x1059fb29c <+864>: mov    x0, x8

    0x1059fb2a0 <+868>: ret    

    0x1059fb2a4 <+872>: mov    x8, #0x0

    0x1059fb2a8 <+876>: mov    x0, x8

    0x1059fb2ac <+880>: ret    


Hi, 


Thank you for the detailed information. This is something we'd definitely want to fix, but we're unable to reproduce the issue internally.

Does this happen when running the example project without any modifications? If it doesn't, can you please tell us what the difference is between the sample and what your application is doing? Or, if possible, can you send us a project where we can reproduce the issue?


Thank you,
Alexandru

We are happy to provide you with the project file, but we would prefer not to post that in a public forum. Is there an email address we can use for that?

Alexandru  -- To follow-up on this, you asked if we see this issue in the unmodified Wikitude example project.


We successfully built and installed the Wikitude example project (unmodified) last fall using iOS 11 and the Wikitude Unity SDK at the time. We did NOT see this issue then, and still do not when running that app on our test iPhone (which has been updated to iOS 12.1).


To see if it happens with iOS 12.1 and the most current Wikitude example project, we downloaded the most recent version of the example project. It runs perfectly within the Unity development environment. We built the Unity project and opened it in Xcode. 


When we install and run this version on the test iPhone, we get messages that the build was successful, and the installation was successful. But it does not actually run on the iPhone (within Xcode), and shuts down the moment it starts. 


The attached screen capture shows the error message within Xcode.

Hi, 


The last issue can be fixed by adding the WikitudeSDK framework as an Embedded Binary, as mentioned in the documentation here.

Please send the project with the original problem to support@wikitude.com.


Thank you,

Alexandru

Ah. You are correct about the embedded binary. We have always done that in the past, but missed it (or did not save it) this one time.


We have sent the project files and some notes to the support@wikitude.com email address.


Thank you!

Login or Signup to post a comment