iOS Question ihttp and ipv6 rejection

vikingivesterled

Active Member
Licensed User
Longtime User
I have just had an app rejected by the App Store due to ipv6 failure
but the threads from 2016 I can see regarding this is mentioning the iNet library.

I don't use iNet library (at least the new log function tells me I'm not) nor the iNetwork libary.
I am using the iHttp library version 1.01 and a
Class module called HttpUtils2 version 2.01
with a setup like this:
Dim mccfjob As HttpJob
mccfjob.Initialize("ggbsjob", Me)
mccfjob.PostString(GetUpdateFile, GetUpdatePull)
And then a simple JobDone sub for returns.

Don't use any direct ip adressing, just network names in the form
http://www.nameofsite.com/filename

Is the iHttp libary and the class module HttpUtils2 still viable / are there updates to them ?
 

vikingivesterled

Active Member
Licensed User
Longtime User
Please use [code]code here...[/code] tags when posting code.

iHttpUtils2 works properly with ipv6 addresses. Can you post the full rejection message?

Below is the Rejection message:

==MESSAGE START============================

Oct 28, 2016 at 2:36 AM
From Apple
2. 1 PERFORMANCE: APP COMPLETENESS
Performance - 2.1

Your app crashes on iPad & iPhone running iOS 10.1 connected to an IPv6 network when we attempted to select any of the items in a created game.
This occurred when your app was used:
- On Wi-Fi
We have attached detailed crash logs to help troubleshoot this issue.

Next Steps
Please revise your app and test it on a device while connected to an IPv6 network (all apps must support IPv6) to ensure that it runs as expected.

Resources
For information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and About Networking.
For information on how to symbolicate and read a crash log, please see Tech Note TN2151 Understanding and Analyzing Application Crash Reports.
If you have difficulty reproducing this issue, please try testing the workflow described in Testing Workflow with Xcode's Archive feature.

If you have code-level questions after utilizing the above resources, you may wish to consult with Apple Developer Technical Support. When the DTS engineer follows up with you, please be ready to provide:
- complete details of your rejection issue(s)
- screenshots
- steps to reproduce the issue(s)
- symbolicated crash logs - if your issue results in a crash log

crashlog-FEF49D4E-5EE3-4373-9A48-1964449D3972.txt
crashlog-E5B81C8A-19CE-4733-92CB-0352729C8800.txt

==MESSAGE END====================================

(Crashlogs have been forwarded to : [email protected] by email)


I suspect they have moved to a different network, or device, mid cycle when testing the app,
because I only see 1 registration.
They mention selecting stuff in a game,
however none of the buttons on that particular screen does anything at that stage,
but the page is doing a http call in the background to a perl script on my server to download game status.
(I can see their progress due to those calls and the server logs)

I resubmitted the App in a new version including the libraries iNet and iPhone,
suggesting they do the whole process including registration via ipv6,
but it just resulted in another quick rejection with a pure ipv6 comment, and nothing logged on the backend.


My MacPro is to old so it don't have the ipv6 option when creating a wi-fi hotspot
I can however create a wi-fi hotspot on a Windows 10 laptop
So if somebody has link to some instructions for Win 10 on how to make it into a ipv6 hotspot
that would be appreciated.
 
Upvote 0

vikingivesterled

Active Member
Licensed User
Longtime User
Your app shouldn't crash if there is a network problem. Are you testing whether Job.Success is true in JobDone?

Definitely. I use this function in most of my apps to pull data of the server using JobDone to store them in a file, sample:
B4X:
Sub JobDone (JobReturn As HttpJob)
    'Log("JobName = " & JobReturn.JobName & ", Success = " & JobReturn.Success)
    If JobReturn.Success = True Then
        Select JobReturn.JobName
            Case "pcbsjob"
                'Log("Case-pcbsjob")
                File.WriteString(File.DirDocuments, "mydir/myapp/BSPlayCards1.txt", JobReturn.GetString)
                ReadPlayCardsFile
            Case "ggbsjob"
                'Log("Case-ggbsjob")
                File.WriteString(File.DirDocuments, "mydir/myapp/BSGetGame1.txt", JobReturn.GetString)
                ReadGetGameFile
            Case "ppbsjob"
                'Log("Case-ppbsjob")
                File.WriteString(File.DirDocuments, "mydir/myapp/BSPlayPass1.txt", JobReturn.GetString)
                ReadPlayPassFile
            Case "pubsjob"
                'Log("Case-pubsjob")
                File.WriteString(File.DirDocuments, "mydir/myapp/BSPlayCut1.txt", JobReturn.GetString)
                ReadPlayerCutFile
         End Select
    Else
        'Log("Error: " & JobReturn.ErrorMessage)
    End If
    JobReturn.Release
End Sub
(anonymized with mydir and myapp)
(Only the ggbsjob runs on a timer on this page at the stage they where.)

I have tested the whole app repeatedly, the only part I'm missing is the ipv6 bit.
I have the same app in b4a up on Goggle Play for 3 weeks now, and have played several games between an Android and an iPhone. The main difference being that where I in b4a run a separate service timer, I run it as a timer of the MainPage in b4i.
And of course the iPhone won't let me continue running these when the app goes to the background.
 
Last edited:
Upvote 0

vikingivesterled

Active Member
Licensed User
Longtime User
I am going by that it is not ipv6 so, but that they are deliberately messing to brake the app,
so added some more checks and have submitted it to Apple again.

I believe this time they deliberately skipped the initial on first open registration
to mess with the parameters in the http communication to the backend server.
This won't crash the app but will stop it from doing anything.
I will have to make the registration page the MainPage and everything else sub pages,
so they can't get past it whatever they do.
 
Upvote 0

sorex

Expert
Licensed User
Longtime User
you should check the content for something specific to be sure it's valid data that's arriving.

if not some processing code might fail later.
 
Upvote 0

vikingivesterled

Active Member
Licensed User
Longtime User
you should check the content for something specific to be sure it's valid data that's arriving.

if not some processing code might fail later.

I do several tests on the returned data, both for content and completeness.

Made the MainPage (app starter page) into the registration page so they couldn't get past it without registering properly
and the old MainPage into a FirstPage, and it seems to have got them past the networking issue.
(It now just blinks past the MainPage onto the FirstPage on restart if they have already registered,
and moves them back forward if the try to back into it)

Had to do the same for a different app made with b4a, to get it accepted by the Samsung Seller Office a while back.
I love Google for their easygoing attitude to apps submitted, but sometimes it's informative to get apps thoroughly tested by Apple,
without paying extra for it.


PS: The App Store tester finally called repeating that the app "crashed"
After some discussion they changed it to "didn't do anything in that game screen"
which I explained was normal because it was waiting for another person/device to join since it is a multiplayer only game.
 
Last edited:
Upvote 0
Top