2016-03-17 19 views
5

Ich habe eine App in Unity und Setup für den Mac App Store freigegeben, die Netzwerkaufgaben, die gut funktionieren in einem OS X Build das ist nicht für den App Store aber Sobald ein Build erstellt wurde, der App-Store-Validierung/Codesign erfordert, schlägt das Netzwerk fehl. Die App und der Build-Prozess haben vor nicht allzu langer Zeit funktioniert, scheitern jedoch.OSX Mac Store App Vernetzung schlägt fehl nach Codesign/Paket

Ich bin Netzwerkberechtigungen in den Berechtigungen enthalten und ich sehe keine Spur eines Sandbox-Fehlers in der Systemkonsole. Die In-App-Kauf-Netzwerkanrufe sind erfolgreich, aber wenn ich den Verkehr auf irgendetwas anderes im Terminal überprüfe, kommen keine Daten rein oder raus.

Also fragte ich mich, ob jemand irgendwelche Ideen hatte, was diese oder weitere Tests verursachen könnte, die ich verwenden könnte, um herauszufinden, was das Problem sein könnte.

+0

Welche Plugins verwenden Sie? und welche Frameworks fügen Sie in xcode hinzu? Was sind die Netzwerkaufgaben? einfache json Abfragen oder Sockets oder was? Bitte erläutern Sie die Möglichkeiten, um Unterstützung zu erhalten, und erleichtern Sie uns die Hilfe. – DeyaEldeen

+0

Das einzige Plugin ist das Unity IAP, keine Frameworks, die über Xcode hinzugefügt wurden (ohne Xcode wirklich zu benutzen). Networking Ich versuche, eine Verbindung zu Parse herzustellen, aber ich habe auch einfach WWW-Aufrufe versucht, Sites zu testen, und nichts kommt durch. – AlexTheMighty

+0

@AlexTheMighty Ich habe das gleiche Problem mit Unity 5.3.4p1. Hast du jemals eine Lösung gefunden? –

Antwort

0

Ich habe nie herausgefunden, was war falsch Unity WWW-Klasse, aber ich war in der Lage, um das Problem mit der System.Net.WebClient-Klasse umgehen. Ich habe einen einfachen Wrapper implementiert, der eine ähnliche Schnittstelle zur WWW-Klasse von Unity bietet. Hier ist der Code, den ich verwendet habe:

using System; 
using System.Net; 
using System.Net.Security; 
using System.Text; 

/// <summary> 
/// Web request using the WebClient class. 
/// </summary> 
/// <seealso cref="Assets.Scripts.WebRequest" /> 
internal class WebRequest 
{ 
    /// <summary> 
    /// The web client. 
    /// </summary> 
    private WebClient _client; 

    /// <summary> 
    /// The error message. 
    /// </summary> 
    private string _error; 

    /// <summary> 
    /// The is done flag. 
    /// </summary> 
    private bool _isDone; 

    /// <summary> 
    /// The progress. 
    /// </summary> 
    private float _progress; 

    /// <summary> 
    /// The text. 
    /// </summary> 
    private string _text; 

    /// <summary> 
    /// Initializes a new instance of the <see cref="WebRequest"/> class. 
    /// </summary> 
    /// <param name="url">The URL.</param> 
    public WebRequest(string url) 
    { 
     this._client = new System.Net.WebClient(); 
     this._client.DownloadProgressChanged += this.WebClientProgressChanged; 
     this._client.DownloadStringCompleted += this.WebClientDownloadCompleted; 
     this._client.DownloadStringAsync(new Uri(url)); 
    } 

    /// <summary> 
    /// Initializes a new instance of the <see cref="WebRequestDotNet"/> class. 
    /// </summary> 
    /// <param name="url">The URL.</param> 
    /// <param name="form">The form.</param> 
    public WebRequest(string url, UnityEngine.WWWForm form) 
    { 
     this._client = new System.Net.WebClient(); 
     this._client.UploadProgressChanged += this.WebClientUploadProgressChanged; 
     this._client.UploadDataCompleted += this.WebClientUploadCompleted; 

     this._client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 

     // Try to get the header from the Unity form 
     foreach (var header in form.headers) 
     { 
     const string ContentType = "Content-Type"; 
     if (header.Key == ContentType) 
     { 
      string contentType = header.Value; 
      this._client.Headers.Remove(ContentType); 
      this._client.Headers[ContentType] = contentType; 
     } 
     } 

     this._client.UploadDataAsync(new Uri(url), form.data); 
    } 

    /// <summary> 
    /// Gets the error message. Returns null if there is no error. 
    /// </summary> 
    /// <value> 
    /// The error message. 
    /// </value> 
    public string Error 
    { 
     get 
     { 
     return this._error; 
     } 
    } 

    /// <summary> 
    /// Gets a value indicating whether this request is done. 
    /// </summary> 
    /// <value> 
    /// <c>true</c> if this instance is done; otherwise, <c>false</c>. 
    /// </value> 
    public bool IsDone 
    { 
     get 
     { 
     return this._isDone; 
     } 
    } 

    /// <summary> 
    /// Gets the progress, 0 to 1. 
    /// </summary> 
    /// <value> 
    /// The progress. 
    /// </value> 
    public float Progress 
    { 
     get 
     { 
     return this._progress/100.0f; 
     } 
    } 

    /// <summary> 
    /// Gets the resulting text. 
    /// </summary> 
    /// <value> 
    /// The text. 
    /// </value> 
    public string Text 
    { 
     get 
     { 
     return this._text; 
     } 
    } 

    /// <summary> 
    /// Called when the download is complete. 
    /// </summary> 
    /// <param name="sender">The sender.</param> 
    /// <param name="e">The <see cref="DownloadStringCompletedEventArgs"/> instance containing the event data.</param> 
    private void WebClientDownloadCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     if (e.Error != null) 
     { 
     this._error = e.Error.ToString(); 
     } 
     else 
     { 
     this._text = e.Result; 
     } 

     this._isDone = true; 
    } 

    /// <summary> 
    /// Called when the progress changes. 
    /// </summary> 
    /// <param name="sender">The sender.</param> 
    /// <param name="e">The <see cref="DownloadProgressChangedEventArgs"/> instance containing the event data.</param> 
    private void WebClientProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
    { 
     this._progress += e.ProgressPercentage; 
    } 

    /// <summary> 
    /// Called when the upload is complete. 
    /// </summary> 
    /// <param name="sender">The sender.</param> 
    /// <param name="e">The <see cref="UploadValuesCompletedEventArgs"/> instance containing the event data.</param> 
    private void WebClientUploadCompleted(object sender, UploadDataCompletedEventArgs e) 
    { 
     if (e.Error != null) 
     { 
     this._error = e.Error.ToString(); 
     } 
     else 
     { 
     this._text = Encoding.UTF8.GetString(e.Result); 
     } 

     this._isDone = true; 
    } 

    /// <summary> 
    /// Called when the upload progress changes. 
    /// </summary> 
    /// <param name="sender">The sender.</param> 
    /// <param name="e">The <see cref="UploadProgressChangedEventArgs"/> instance containing the event data.</param> 
    private void WebClientUploadProgressChanged(object sender, UploadProgressChangedEventArgs e) 
    { 
     this._progress += e.ProgressPercentage; 
    } 
} 
Verwandte Themen