У меня есть приложение, которое теперь нужно развернуть в магазине приложений, так как оно постепенно становится неизбежным благодаря Gatekeeper.

Единственная проблема в том, что веб-запросы кажутся неудачными, в том смысле, что их даже не запускают.

Следующий фрагмент кода был взят из статьи Xamarin Bugzilla и успешно работает при создании для выпуска и отладки;

            try
            {
                WebClient test = new WebClient();
                Console.WriteLine("Testing SSL GET...");
                string testresponse = test.DownloadString(checkFileUrl);
                Console.WriteLine("testresponse = " + testresponse);
            } catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.InnerException.Message);
            }

Однако, когда я перехожу к сборке AppStore с песочницей и правами сетевого ввода-вывода, запрос никогда не отправляется, что подтверждено Чарльзом в режиме расшифровки без использования SSL. Из консоли выплевывается следующее:

Testing SSL GET...
Error getting response stream (Write: The authentication or decryption has failed.): SendFailure
The authentication or decryption has failed.

Кажется, это проблема, поскольку мы используем вызовы SOAP, сделанные для службы IIS, для выполнения действий, первое из которых - вход в систему. Для отладки и выпуска вход в систему работает нормально, поскольку вызовы завершены. И снова сборка AppStore даже не пытается установить контакт.

Сертификаты действительны, и ЦС установлен в моей связке ключей.

В преддверии этого я получал некоторые исключения в коде (в отладке), например:

System.Exception..ctor (message="invalid encoding specification.") in /private/tmp/source/bockbuild-mono-3.2.6/profiles/mono-mac-xamarin/build-root/mono-3.2.6/mcs/class/corlib/System/Exception.cs:81

А также

System.Exception..ctor (message="Store Root doesn't exists.") in /private/tmp/source/bockbuild-mono-3.2.6/profiles/mono-mac-xamarin/build-root/mono-3.2.6/mcs/class/corlib/System/Exception.cs:81

А также

System.Exception..ctor (message="Store CA doesn't exists.") in /private/tmp/source/bockbuild-mono-3.2.6/profiles/mono-mac-xamarin/build-root/mono-3.2.6/mcs/class/corlib/System/Exception.cs:81

Что до сих пор заставляет меня думать, что это проблема с сертификатом. Тестовый URL-адрес - это ссылка S3, а сервер входа в систему - это экземпляр EC2 с действующими сертификатами.

Приветствия .

3
Daniel Park 28 Мар 2014 в 10:56
2
У меня была аналогичная проблема, когда все работает, когда я использую http вместо https, но я думаю, если вам понадобится SSL, это не решит вашу проблему
 – 
eggy
29 Мар 2014 в 04:49

1 ответ

Лучший ответ

Проверьте, как упаковывается ваше приложение.

По умолчанию при создании проекта (в Xamarin Studio или Visual Studio) он вызывает инструмент под названием mtouch, который включает компоновщик для управляемого кода. Этот инструмент используется для удаления функций из библиотек классов, которые приложение не использует.

По крайней мере, mtouch хотел бы, чтобы вы поверили.

Вариант поведения компоновщика по умолчанию - Link all assembiles. Это будет использовать mtouch, чтобы попытаться сделать приложение как можно меньшим путем изменения кода пользователя . Это может и приведет к нарушению кода, который использует функции таким образом, который mtouch не может обнаружить (например, веб-службы, отражение или сериализация).

Обходной путь, который я использовал, - отключить связывание. Изменяя поведение компоновщика на Don't Link, это гарантирует, что никакие сборки не будут изменены.

Вы можете найти меню для этого, щелкнув правой кнопкой мыши соответствующий проект и выбрав Options:

Xamarin Studio - окно параметров проекта

Linker behaviour in a particular project

Попробуйте изменить поведение компоновщика на Don't Link (как показано выше) и выполните пересборку.

Дополнительная информация

Xamarin Guides - компоновщик с iOS

1
eggy 30 Мар 2014 в 08:22