Приложение Unity падает при сборке для iOS с включенной камерой - PullRequest
0 голосов
/ 08 июня 2019

У меня есть приложение, которое использует zxing для сканирования qr-кодов в приложении.Однако, когда я создаю приложение с этими сценариями в сцене, приложение вылетает при запуске.Я думал, что это что-то в Awake () или Start (), но я обернул эти методы в try catch, и даже тогда я не получаю никаких ошибок, и он не падает на Android и в редакторе.

У меня нет доступа к Mac, и я использую Unity Cloud Build для его сборки.

Я также не знаю, как включить разрешения, я думал, что сделал при созданиифайл .p12, но я также обнаружил, что есть файл info.plist, с которым я должен запрашивать разрешения.

До исследования я нашел этот Вопрос Unity о добавлении элементов в проект Xcode , но не только включение xcodeapi дало мне ошибки, но операторы using не работали.

Существует два сценария

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;

public class WebCamController : MonoBehaviour {

    public int desiredWidth = 1280;
    public int desiredHeight = 720;
    public int desiredFPS = 60;
    public RawImage output;
    [HideInInspector]
    public WebCamTexture webcamTexture;

    void Start ()
    {
        webcamTexture = new WebCamTexture(desiredWidth, desiredHeight, desiredFPS);
        output.texture = webcamTexture;
        Play();
    }
    public void Play()
    {
        webcamTexture.Play();
    }
    public void Pause()
    {
        webcamTexture.Stop();
    }

}

и

using UnityEngine;
using System.Collections;

using ZXing;
using ZXing.QrCode;
using ZXing.Common;
using System;

public class CodeScanner : MonoBehaviour {
    private static CodeScanner _instance;
    public static CodeScanner Instance
    {
        get
        {
            if(null == _instance)
            {
                Debug.Log("Code Scanner Instance not found");
            }
            return _instance;
        }
    }

    [Header("References")]
    public WebCamController wcc;

    [Header("Properties")]
    private BarcodeReader codeScanner;
    private string lastScanned = "";

    public delegate void Found(string text, string type);
    public event Found OnCodeScanned;
    private bool active;

    public void Awake()
    {
        _instance = this;
    }

    void Start () {
        codeScanner = new BarcodeReader();
        StartCoroutine(ReadCode());
        wcc.Play();
    }

    IEnumerator ReadCode()
    {
        while (active)
        {
            try
            {
                var data = codeScanner.Decode(wcc.webcamTexture.GetPixels32(), wcc.webcamTexture.width, wcc.webcamTexture.height);
                if (data != null)
                {
                    //if (data.Text != lastScanned)
                    //{
                    OnCodeScanned(data.Text, data.BarcodeFormat.ToString());
                    //}
                    lastScanned = data.Text;
                }
            }
            catch(Exception e)
            {

            }
            yield return new WaitForSeconds(1.0f);
        }
    }


    public void Activate()
    {
        wcc.Play();
        active = true;
        StartCoroutine(ReadCode());
    }

    public void Stop()
    {
        active = false;
        wcc.Pause();
    }
}

Мое устройство правильно добавлено в сертификат .p12. Я могу скомпилировать и запустить программу без этих сценариев в сцене.

...