Sparkle checkForUpdatesInBackground не размещает запрос на веб-сервере
В моем приложении командной строки при вызове [[SUUpdater sharedUpdater] checkForUpdatesInBackground]
Проект Sparkle не размещает HTTPS-запрос на моем веб-сервере. Я хочу позвонить checkForUpdatesInBackground
чтобы добиться успеха, поэтому я знаю, что мои настройки верны. Я использую веб-сервер Nginx через HTTPS и просматриваю логи этого сервера, чтобы убедиться, что запрашивается файл appcast.xml.
Я попытался отладить платформу Sparkle и узнал после вызова checkForUpdatesInBackground
каркас вызывает dispatch_async
здесь Это дало следующую трассировку стека.
2018-12-20 06:46:46.037297-0800 MyApplication[28705:224144] Stack trace : (
0 ??? 0x00000001005a7b0e 0x0 + 4300897038
1 MyApplication 0x0000000100001af0 main + 0
2 Sparkle 0x000000010036a5f9 -[SUAppcast fetchAppcastFromURL:inBackground:completionBlock:] + 1625
3 Sparkle 0x0000000100372fff -[SUBasicUpdateDriver checkForUpdatesAtURL:host:] + 1423
4 Sparkle 0x00000001003aabe5 -[SUUpdater checkForUpdatesWithDriver:] + 773
5 Sparkle 0x00000001003aa41e -[SUUpdater checkForUpdatesInBackground] + 494
6 MyApplication 0x0000000100001b9f main + 175
7 libdyld.dylib 0x00007fff5ddd1085 start + 1
)
Мой Info.plist:
{
"SUAllowsAutomaticUpdates" = NO;
CFBundleIconFile = "myicon.icns";
CFBundleExecutable = MyApplication;
"SUAutomaticallyUpdate" = NO;
"SUScheduledCheckInterval" = 3600;
"SUEnableAutomaticChecks" = NO;
SUPublicEDKey = "0xe+xaH4VBOMIADOqOqBAZug/hnrCqBKUyCffx+8Qvw=";
SUFeedURL = "https://test.myurl.com/appcast.xml";
CFBundleVersion = "1.0.0.0";
"CFBundleShortVersionString" = "7.0";
CFBundleIdentifier = "nl.apps.myapp";
}
Мой код:
int main(int argc, const char * argv[]) {
@autoreleasepool {
[[SUUpdater sharedUpdater] checkForUpdatesInBackground];
}
}
Sparkle останавливает завершение моего приложения, чтобы дождаться окончания запроса. На моем веб-сервере я не вижу запрашиваемого appcast.xml, и Sparkle не показывает окно с какой-либо информацией об обновлении.
1 ответ
В моем случае, как указал Rengers, Sparkle не работает, потому что это инструмент командной строки. Это означает, что не существует основного цикла, от которого зависит Sparkle. Sparkle помещает некоторые из своих действий в основную очередь событий, используя dispatch_async, например, здесь, в исходном коде.
Чтобы преодолеть это, я превратил свой инструмент командной строки в графический интерфейс, и теперь все работает нормально.