Post

Replies

Boosts

Views

Activity

ARKit ARParticipantAnchor's transform is NaN in AR Collaboration
I am running this ARKit example project https://developer.apple.com/documentation/arkit/creating_a_collaborative_session. Everything works perfectly, except that the ARParticipantAnchor's transform is always NaN (all 16 numbers in the transform matrix are NaN). Other ARAnchors all have a valid transform value but ARParticipantAnchor doesn't. From my understanding of ARKit, after a peer iPhone joined the collaboration session, an ARParticipantAnchor is added through the delegate function session:didAddAnchors: to represent the location and orientation of that peer. After that, ARKit keeps updating that ARParticipantAnchor's transform through the delegate function session:didUpdateAnchors: to minor the real-time location and orientation of that peer's iPhone. I have run this sample project several months ago and it went perfectly. So I am pretty confident that I am not missing any detail. But from yesterday, I could not make it work. An ARParticipantAnchor was successfully added after a peer had joined the collaboration session, and the delegate function session:didUpdateAnchors: was called every frame, but the ARParticipantAnchor's transform in session:didUpdateAnchors: was always NaN! I also tried the Unity ARFoundation samples in this repo https://github.com/Unity-Technologies/arfoundation-samples/tree/main/Assets/Scenes/ARKit/ARCollaborationData, and it doesn't work either! I have used this repo several months ago and I am pretty sure it worked. So, if both native ARKit and Unity have this problem, I suspect that probably there is a bug in ARParticipantAnchor after a recent ARKit update? After all, if ARParticipantAnchor's transform is always NaN, what is the point to update it every frame and share that data through the network? Could anyone tell me how to make it work? Thanks!
1
0
658
Nov ’21
The Round Trip Time of MultipeerConnectivity is very unstable
I am building an app using MultipeerConnectivity with 2 iPhones. The app needs low latency real-time networking. When I was measuring the round trip time (RTT), I found that the RTT is very unstable. What I did in code was that I send a ping message from device A to device B and record the current system uptime ([[NSProcessInfo processInfo] systemUptime]) on device A. When device B receives the ping message, it immediately sends a pong message back to device A. When device A receives the pong message, the RTT is calculated by RTT = (current system uptime - previously recorded system uptime) * 1000 I sent the ping message every 2 seconds from device A to device B and got the following RTT result: rtt 8.7917 rtt 156.9327 rtt 251.2976 rtt 3.9905 rtt 6.2492 rtt 5.3590 rtt 96.0188 rtt 190.8776 rtt 291.0668 rtt 7.0962 rtt 6.8734 rtt 43.4346 rtt 227.1793 rtt 235.7925 rtt 336.1445 rtt 10.1862 rtt 14.6641 rtt 100.1742 rtt 194.9736 rtt 294.0715 rtt 5.0174 rtt 5.5357 rtt 65.7211 You might have noticed the pattern, it is a loop! At the beginning, the RTT is very low (around 5 ms), which is good. But after a short period of time (about 5 seconds), it gradually increases and finally hits a peak value of around 300 ms. Then it immediately drops to around 5 ms and the loop repeats again. I didn't send any other message between these two devices, only ping pong messages were transmitted. This is very weird to me, since it is stably unstable... Is that supposed to happen because of the nature of MultipeerConnectivity? Is that possible to make MultipeerConnectivity network stable with a low RTT (around 5ms)? Thank you very much!
0
0
874
Nov ’21
Is MultipeerConnectivity a good choice for a realtime AR game with more than 4 devices?
I am developing a multiplayer AR game based on this repo https://github.com/Unity-Technologies/arfoundation-samples/tree/main/Assets/Scenes/ARKit/ARCollaborationData and this demo https://developer.apple.com/documentation/arkit/creating_a_collaborative_session?language=objc When I had two devices in the game, everything was good. But when I increased the number of devices to four, the devices got over-heated quickly and the network got jammed very often. Since it is a peer-to-peer network, each device send its ARCollaborationData to all other devices every frame, I don't know if MultipeerConnectivity is capable of handling such amount of data in realtime with low energy consuming. I have tested the Round Trip Time of MultipeerConnectivity in this question https://developer.apple.com/forums/thread/694882, and found it is not very stable for a realtime game. My question is that, is MultipeerConnectivity a good choice for a realtime AR game with more than 4 devices? I know Airdrop is implemented using this technology, so I guess maybe it is designed for high throughput instead of low latency and stability? Should I use another network solution like Photon-Realtime?
0
0
786
Dec ’21
Unable to prepare iPhone for development
When building my project using Xcode, it said "Unable to prepare iPhone for development. Please check the connection to the device, and review all errors in the Devices and Simulators window." And in the Devices and Simulators window, it said "Failed to prepare device for development. If you are certain that Xcode supports development on this device, try disconnecting and reconnecting the device." I am using Xcode 13.1 and iOS 15.3 on an iPhone 13 Pro. This problem used to happen very often to me (3 times a day usually). In the past, after I restarted the iPhone, it would be fine. But this time, even after I restarted my iPhone multiple times, it still didn't work. This problem has been lasting for a week. Could anyone help me to fix it?
5
0
12k
Jan ’22
ARM64 branch out of range error on watchOS
I am building a Unity app on iOS with a companion Apple Watch App. I added a Watch App for for iOS app target in the Xcode project generated by Unity. Both Unity iOS target and watchOS target worked perfectly in the past. Today when I tried to build the app, I could still run the Unity iOS target but got the following error when trying to run the watchOS target. ld: b(l) ARM64 branch out of range (154869072 max is +/-128MB): from +[UnityURLRequest requestForTask:] (0x00005D50) to __Unwind_Resume.stub@0x00000000 (0x093B7CA4) in '+[UnityURLRequest requestForTask:]' from /Users/yuchen/Library/Developer/Xcode/DerivedData/Unity-iPhone-gdwalbfioaucpucqjcrkcmzzwjkw/Build/Intermediates.noindex/Unity-iPhone.build/Debug-iphoneos/UnityFramework.build/Objects-normal/arm64/UnityWebRequest.o clang: error: linker command failed with exit code 1 (use -v to see invocation) I am very confused with this error because it mentioned UnityFramework. My watchOS target is empty with only 3 SwiftUI files. From my understanding, the watchOS target should have nothing to do with UnityFramework even though they are in the same project. I have found two similar questions: https://stackoverflow.com/questions/64152275/how-to-fix-build-that-fails-with-arm64-branch-out-of-range-for-very-large-app https://stackoverflow.com/questions/27977253/arm64-branch-out-of-range It seems that the reason is because the app is too big? (There was no error before since my project was not big enough?) Does anyone know how to solve this problem? Thank you very much.
0
0
2.6k
Mar ’22
Delete all users for the app
The situation is like this: I have an iOS app with SIWA (Sign in with Apple) implemented. I uploaded my app to TestFlight and got some users. But in the TestFlight version, I didn't upload the user's name and email to the cloud. Since the nature of SIWA, I cannot get those users' data again. Now I want to officially publish my app to Apple Store, and I want to make a refresh for my app. I want to delete all users' accounts so that the app can get their names and emails again and upload the data to my database. Is that possible? Since I don't want to change my app's Bundle ID. Thank you very much.
0
0
635
Nov ’22