На статические переменные ссылаются Объекты класса, на которые ссылается ClassLoaders - поэтому, если любой, ClassLoder отбрасывает Класс так или иначе (если это даже возможно) или сам ClassLoder не становится имеющим право на набор (более вероятно - думают о разгрузке веб-приложений) статические переменные (или скорее объекты, на которые они ссылаются) не будет собран.
Что ж, похоже, что и в случае с множеством этих проблем с подписью кода, удаление всех профилей обеспечения, сертификатов и т. Д., А также отмена и генерация всего снова и снова, оказалось, помогли . Я даже создал новый идентификатор пакета, идентификатор приложения и т. Д., И теперь распространение AdHoc снова работает.
В XCode, в " Группы и файлы », разверните« Цели »и дважды щелкните цель вашего приложения.
Это откроет панель« Информация »для вашей цели. В разделе «Сборка» проверьте раздел «Подписание кода» на наличие старых профилей. Это случалось со мной много раз, особенно после обновления до новой версии sdk и iphone os
I had to manually remove the provisioning profiles from my phone, then rebuild the apps after doing a "clean all targets" from the build menu.
That's under Settings -> General -> Profiles
This happened to me when I got a new Mac. You'll fix it, don't worry
Вчера у меня была такая же ошибка. Я пробовал все различные процедуры сброса в других ответах, но безуспешно. В конце концов я также
Вот и вот, теперь работает, ошибка исчезла. Это серьезная территория вуду.
Можно создать событие в библиотеке классов, которое прослушивается/регистрируется независимо от уровня пользовательского интерфейса/консоли. Таким образом, он может принять решение действовать на мероприятии, если это считается необходимым в любом количестве мест, как вы хотите. Это действительно зависит от настройки архитектуры.
-121--4950904-Непосредственная проблема
Ваша непосредственная проблема заключается в том, что SynchronizationContext.Current
не устанавливается автоматически для WPF. Чтобы установить его, вам нужно будет сделать что-то подобное в вашем коде TheUISync при работе под WPF:
var context = new DispatcherSynchronizationContext(
Application.Current.Dispatcher);
SynchronizationContext.SetSynchronizationContext(context);
UISync = context;
Более глубокая проблема
SynchronizationContext
связана с поддержкой COM + и предназначена для пересечения потоков. В WPF вы не можете иметь Dispatcher, который охватывает несколько потоков, поэтому один SynchronizationContext
не может пересекать потоки. Существует ряд сценариев, в которых SynchronizationContext
может переключаться на новый поток, в частности, любой, вызывающий ExecureContext.Run ()
. Поэтому при использовании SynchronizationContext
для предоставления событий клиентам WinForms и WPF необходимо знать, что некоторые сценарии будут нарушены, например, веб-запрос на веб-службу или сайт, размещенный в том же процессе, будет проблемой.
Как обойти необходимость SynchronizationContext
Из-за этого я предлагаю использовать механизм WPF Dispatcher
исключительно для этой цели, даже с кодом WinForms. Вы создали singleton-класс «TheUISync», в котором хранится синхронизация, поэтому у вас есть способ подключиться к верхнему уровню приложения. Тем не менее, вы можете добавить код, который создает добавляет содержимое WPF в приложение WinForms, чтобы Dispatcher
работал, а затем использовать новый механизм Dispatcher
, который я описываю ниже.
Использование Dispatcher вместо SynchronizationContext
механизма WPF Dispatcher
фактически устраняет необходимость в отдельном объекте SynchronizationContext
. Если у вас нет определенных сценариев взаимодействия, таких как совместное использование кода с объектами COM + или пользовательскими интерфейсами WinForms, лучше всего использовать Dispatcher
вместо SynchronizationContext
.
Это выглядит следующим образом:
public class Foo
{
public event EventHandler FooDoDoneEvent;
public void DoFoo()
{
//stuff
OnFooDoDone();
}
private void OnFooDoDone()
{
if(FooDoDoneEvent!=null)
Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Normal, new Action(() =>
{
FooDoDoneEvent(this, new EventArgs());
}));
}
}
Обратите внимание на то, что вам больше не нужен объект TheUISync - WPF обрабатывает эту деталь для вас.
Если вам удобнее использовать старый синтаксис делегата
, вы можете сделать этот путь:
Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Normal, new Action(delegate
{
FooDoDoneEvent(this, new EventArgs());
}));
Несвязанная ошибка для исправления
Также обратите внимание, что в исходном коде есть ошибка, которая реплицируется здесь. Проблема заключается в том, что FooImentEvent может быть установлен равным NULL между временем вызова OnFooDoDone и временем вызова делегата BeginInvoke
(или Post
в исходном коде). Исправление является вторым тестом внутри делегата:
if(FooDoDoneEvent!=null)
Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Normal, new Action(() =>
{
if(FooDoDoneEvent!=null)
FooDoDoneEvent(this, new EventArgs());
}));
-121--2889074-После того, как я был остановлен этим довольно долго я пересмотрел настройки и обнаружил, что я отменил «Код, подписывающий идентификатор» и «Любое устройство iPhone OS» записи. - Подсказка, которая у меня была, о том, что это происходит, была показана.
В этот момент xcode пытается сконфигурировать телефон (устройство)
Поскольку я префиксирую все мои профили «AdHoc» или «Development» или «AppStore», я сразу увидел, что процесс установки помещает профиль разработки на устройство, а не профиль AdHoc.
Также убедитесь, что вы добавили ссылку на имя файла с правами "dist.plist" в конфигурации вашего проекта CODE_SIGN_ENTITLEMENTS.
Просто чтобы добавить примечание: Я столкнулся с такой же ошибкой (0xE8008016) после замены логической платы моего Macbook (хотя я представляю, что у вас будет такая же проблема на совершенно новом mac), и после нескольких часов хождения по кругу я понял, что на портале программы для разработчиков iPhone есть отдельные сертификаты для разработки и распространения.
Смена оборудования означает, что вам нужно перевыпустить оба сертификата - я перевыпустил Developer, но не Distribution. Поскольку мое имя не менялось, когда менялось оборудование (а сертификаты идентифицируются по имени владельца), это сделало проблему трудновыявляемой ;) Надеюсь, это поможет кому-то еще избежать моего разочарования.
Другая причина заключается в том, что устройство, на которое вы хотите установить, не является утвержденным устройством в сертификате распространения.