IPv6 for Unity iOS Exports

124

Comments

  • @scuta: The trick is, that the IPv6 network has a DNS64/NAT64 "gateway" to the IPv4 world. Even if your device doesn't see any IPv4 addresses ever, it can connect through this gateway to any IPv4 server. This is what the shared IPv6-only network on MacOS provides.

    In theory, this means Apple's testing lab should also provide this but they don't. As described in the first post, you should make sure you point out that you tested along their requirements, that you use UDP initiated by the client and expect UDP responses from the (IPv4) server, which is Photon.

    By all means, you should test TCP with the MacOS IPv6-only WiFi, too. If that's OK, Apple should accept the game, if you run TCP as workaround during submission.

    If you need help communicating with Apple, we're happy to do to. However, we never got involved in any specific case and never got useful info by them, why their tests fail. It's not in our hands, sadly!
  • Thanks @Tobias that was an awesome answer and it pretty much cleared it up for me. I understand completely that you cannot do anything about this, Apple's attitude was always like this so no surprise there.. By the way I switched to TCP and it was magically accepted although it was only a test-flight build. Anyway I will stick around and update you guys whether it passes the live review or not.
  • I was directed here, having the exact same issue as @KevinB earlier in this thread (using Photon Server's Load Balancing application, Apple can successfully connect to our master server, but their connection times out trying to connect to the game server on the same machine, just with a different port).

    It looks as though UDP is a pretty consistent culprit in this, having read the replies to this thread, but we're not willing to switch protocols because of this. Instead, we have implemented an "offline mode" of sorts for our game that allows our app to pass Apple's review, even when Photon times out.

    Having said that, have you, @Tobias, or anyone else at Exit Games, tried to create and submit a small iOS app that fit this criteria? Ideally both the client and server would be configured with deeper logging than customers have access to to see if:
    • Apple is even sending any UDP traffic to the game server that maybe Photon is mis-handling/ignoring;
    • if they're not even getting that far (e.g., their network setup is bad).
    It might provide better data for them than we, as customers, can provide if you can show them that literally nothing is making its way to your server. Or, in the other case, it could give you more information about a possible bug that's been hard to track down on your end.

    This issue has plagued me for months now and I've been rejected many, many times because of it. It sounds like you've been able to hop on a call with Apple about this in the past, but if you actually had an iOS app in the store for them to reference (and for you to monitor), it might make things easier for both sides to diagnose. What do you think?
  • Whenever I try to connect with the DNS64/NAT64 testing hotspot, I get this error: Connect() to 'ns.exitgames.com' () failed: System.Net.Sockets.SocketException: No such host is known at System.Net.Dns.hostent_to_IPHostEntry (System.String h_name, System.String[] h_aliases, System.String[] h_addrlist) [0x00000] in <filename unknown>:0 at System.Net.Dns.GetHostByName (System.String hostName) [0x00000] in <filename unknown>:0 at System.Net.Dns.GetHostEntry (System.String hostNameOrAddress) [0x00000] in <filename unknown>:0 at ExitGames.Client.Photon.IPhotonSocket.GetIpAddress (System.String address) [0x00000] in <filename unknown>:0 at ExitGames.Client.Photon.SocketUdp.DnsAndConnect () [0x00000] in <filename unknown>:0 ExitGames.Client.Photon.SocketUdp:DnsAndConnect() (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) Cause: ExceptionOnConnect ConnexionManagement:OnFailedToConnectToPhoton(DisconnectCause) NetworkingPeer:SendMonoMessage(PhotonNetworkingMessage, Object[]) NetworkingPeer:OnStatusChanged(StatusCode) ExitGames.Client.Photon.EnetPeer:DispatchIncomingCommands() ExitGames.Client.Photon.PhotonPeer:DispatchIncomingCommands() PhotonHandler:Update()
  • here the anwser from apple wow :/
    Thank you for your response. We do not have special procedures for testing PUN servers. Your app should work when submitted, just as other apps have done successfully. Your issues may or may not be related to the factors discussed in those forums.

    Your app is still failing to connect with the server.

    They cant connect to the server but when i testing it i can :/
  • @forplayers: When you get the "No such host is known" issue, then your test IPv6 network is not setup properly or something else blocks that net from accessing DNS/DNS64. This category of issues is a "setup problem". Maybe check the Mac's settings for the shared WiFi...

    @rayleigh: That is as unhelpful as ever by Apple.

    We thought about submitting our own app but have not had anything that seemed "release-able", as we only go for demos but it seems we have to get anything submitted. The big question is: Will we be able to learn anything from this?! We're not expecting to be able to start a conversation...
  • maxtyt
    maxtyt
    edited September 2017
    Same problem with PUN 1.75, Unity 5.3.6. Apple accepted my game updates all summer, but rejects now.
    I think of switching to TCP while it is on moderation and then switch back to UDP using backend. Hope this will help.
    I will update info on that later.
  • Switching to TCP did not help me.
  • Maybe I spamed with same builds or maybe switching to TCP helped but my game is finally Ready for Sale!
  • Now they are again rejecting my application :(

    This is the message from Apple:

    "We discovered one or more bugs in your app when reviewed on iPad running iOS 11.0.2 on Wi-Fi connected to an IPv6 network."

    And i replied like this:

    "We are using PUN and that we tested the networkcode versus Apple's own test procedures as described in Apple's own test-description page:
    https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html
    So the bug report is not an indication as to where the problem lies, but the fact that the iOS app works in the test environment and not in App Review is an indication that the app / App Review interaction needs further review. "

    No help, they rejected again .

    Any suggestions?
  • Having exactly same problem with Apple Reviewer....

    Now waiting for someone to call me from Apple lol not sure what they wanna discuss because it is obvious they have problems and not me
  • +1, can't get accepted, and all attempts at reasoning with them have been denied so far.
  • Creating an offline mode helped me out for them to see the content, you should give it a try.
  • We're having the same issue here. We will implement offline playing just for the sake of the app being approved, since Apple won't get along with PUN
  • we got rejected by apple 2 times with the same reason. they told us to test the game through their NAT64 guide. We did it, and everything was going well, but still got rejected.
    Then we thought that would be we were not using the right Ipv6 enviroment, so we called our ISP to set up a new Ipv6-only network. Then, using that network on Unity Editor to connect UsingBestRegion, we got an error like this:

    Connect() to 'ns.exitgames.com' (InterNetwork) failed: System.Net.Sockets.SocketException: A socket operation was attempted to an unreachable network.

    at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP, Boolean requireSocketPolicy) [0x00000] in :0
    at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP) [0x00000] in :0
    at System.Net.Sockets.Socket.Connect (System.Net.IPAddress address, Int32 port) [0x00000] in :0
    at ExitGames.Client.Photon.SocketUdp.DnsAndConnect () [0x00000] in :0

    Please check this. Thanks :smile:
  • Hi all ,
    I am using photon voip plugin in my projetc , once i open the app in ios device app is getting crashed , it is working fine in android and unity editor , But in ios device it was crashing.Currently testing the app after removing all other dependencies , Exceptn voip no other things involved in project and app is still getting crashed in ios device .It would be great if u guys help me in fixing this issue, Thanks in advance :)
  • JohnTube
    JohnTube ✭✭✭✭✭
    Hi @Damu,

    Thank you for choosing Photon!

    Your post is off topic here.
    Take a look here or here.
  • r3lazx said:

    we got rejected by apple 2 times with the same reason. they told us to test the game through their NAT64 guide. We did it, and everything was going well, but still got rejected.
    Then we thought that would be we were not using the right Ipv6 enviroment, so we called our ISP to set up a new Ipv6-only network.

    Well, a pure IPv6 is not supported by the Photon Cloud, as we (still!) have a hard time finding hosting solutions for that.
    However, pure IPv6 is not a requirement by Apple. IPv6 networks with DNS64/NAT64 are.
    The latter two techs are making IPv4 servers available in the IPv6 network (by resolving the hostname accordingly and by doing NAT between both IP versions.

    Without DNS64/NAT64, the Photon Cloud is not available but Apple's review seems to run into another kind of issue (they do have DNS64/NAT64 but seem to block some UDP datagrams coming from the server).

    @r3lazx: Please mail us to developer@exitgames.com, if you're interested to do a test-submission with us. We could try using different ports.
  • well, I have photon chat and photon voice on unity. None connect on ipv6 tests on my iphone. None of them. What gives?
  • mahmoud93p
    edited April 2020
    Hello, today i have reject from apple, apple sent to me screenshot from my game the photon is disconnect, I choose server in Russia and every-time when I test my game the photon is work fine !
    but when apple test my game the photon is not work i don't know why !

    "Maybe apple test my game from USA and my server in Russia and there is issue between servers"

    More information:
    My location: Mena region.
    Photon version : Photon Unity Networking Classic
    My game from 2 year in store and work fine, but when i am make new update i have this issue.
    Photon settings: Photon cloud - Ru

    original message from apple :
    Guideline 2.1 - Performance - App Completeness

    We keep seeing the same bug in your app when reviewed on iPad running iOS 13.4 on Wi-Fi.

    Specifically, your app showed a disconnected message when we tried to initiate a room. Please revise screenshots attached.

    Next Steps

    To resolve this issue, please run your app on a device to identify any issues, then revise and resubmit your app for review.

    If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

    For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue. For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue.

  • @JohnTube @Tobias any one can help me ?
    Yesterday i was update last version pun classic and last unity 2018 version and i was change server regain to EU.

    But today i get reject from apple:
    Guideline 2.1 - Performance - App Completeness


    We discovered one or more bugs in your app when reviewed on iPad running iOS 13.3.1 on Wi-Fi.

    Specifically, your app continues to show a disconnected message when we tried to initiate a room. Please revise screenshots attached.

    Next Steps

    To resolve this issue, please run your app on a device to identify any issues, then revise and resubmit your app for review.

    If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

    For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue. For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue.

    Resources

    For information about testing your app and preparing it for review, please see Technical Note TN2431: App Testing Guide.

    For a networking overview, please review About Networking.
  • JohnTube
    JohnTube ✭✭✭✭✭
    hey @mahmoud93p,

    Did you use the TCP trick?
    Set transport protocol to TCP during review then change back to whatever you want later on.
  • @JohnTube Thank you for your response,
    i am using UDP, But if i change to tcp does effect if there players used UDP?
    because android devices is used UDP right know.

  • @JohnTube , btw my game is released since 2018 and is work fine, and there is 60K users per day, expect this employee review my game is not work with him/her, i think they test from home.
  • @Grinch Is your problem solved? and how yo solved ?
  • My app has been rejected 4 times in a row now using UDP. Only once did it pass.
  • How do I change Connection Protocol in runtime by code?

    I submitted an iOS app developed with PUN2.18 to the App Store review, but it was rejected 9 times! Finally my app passed it with TCP protocol. In their test labs, it seems, only TCP has NAT64 and UDP is not enabled in any way (potentially blocked entirely).

    So, I am trying to change Connection protocol in runtime.
    I found PhotonNetwork.SwitchToProtocol() but it only available in PUN classics.
    How do I change PUN2 Connection Protocol in runtime by code?
  • JohnTube
    JohnTube ✭✭✭✭✭
    Hi @aomii,

    Thank you for choosing Photon!

    The easiest way in PUN 2 to set or switch protocol before connection:
    PhotonNetwork.PhotonServerSettings.AppSettings.Protocol = ConnectionProtocol.Udp;
    PhotonNetwork.ConnectUsingSettings();
    
  • Thanks, @JohnTube !