API устарели в macOS - PullRequest
       27

API устарели в macOS

1 голос
/ 27 мая 2019

Компания, в которой я работаю, разработала программу, и последний раз код касался 2 года назад.Теперь программа должна быть заверена нотариально, поэтому меня попросили позаботиться о ней.

Я перенес код на последнюю версию Xcode (10.2.1) и последнюю версию macOS.Но Xcode предупреждает меня об устаревании нескольких вызовов API:

/ Users / rowelz / Documents / Develop / Code / ThinPrint / в GIT / myProject / osx-client / src / com.myProject.bootstrap / EZPBootstrapper.m: 116: 51: « SMJobCopyDictionary » устарело: сначала устарело в macOS 10.10

NSDictionary * plist = (__bridge NSDictionary *) SMJobCopyDictionary (kSMDomainSystemLaunchd, (__bridge CFStringRef)(метка));

/ Пользователи / rowelz / Документы / Разработка / Код / ThinPrint / в GIT / myProject / osx-client / src / com.myProject.bootstrap / EZPBootstrapper.m: 193:21: « SMJobRemove » устарело: сначала устарело в macOS 10.10

result = (BOOL) SMJobRemove (kSMDomainSystemLaunchd, (__bridge CFStringRef) метка, self -> _ authRef, FALSE,& cfError);

/ Пользователи / rowelz / Документы / Разработка / Код / ThinPrint / в GIT / myProject / osx-client / src / com.myProject.bootstrap / EZPAppDelegate.m: 193: 15:« SMJobSubmit » устарело: сначала устарело в macOS 10.10

submit = SMJobSubmit (kSMDomainUserLaunchd, (__bridge CFDictionaryRef) (plist), NULL, & cfError);

/ Users / rowelz / Documents / Develop / Code /ThinPrint / в GIT / ezeep / osx-client / src / com.myProject.bootstrap / EZPAppDelegate.m: 214: 13: ' SMJobRemove ' устарел: первый устарел в macOS 10.10

удалено = SMJobRemove (kSMDomainUserLaunchd, (__bridge CFStringRef) kEzeepServiceNameUpdaterBstrap, NULL, false, NULL);

Мой руководитель в этом проекте дал следующие граничные условия:

  • В течение этого года он должен работать без ограничений, сбоев и т. Д.

Я бы предпочел не вносить никаких измененийк коду, так как предупреждения, касающиеся SMJobCopyDictionary, SMJobRemove и SMJobSubmit, означают, что есть большое изменение, которое нужно сделать - вся программа должна быть написана заново.И это будет большим усилием в течение одного года.

Мой вопрос: Я хотел бы написать небольшой инструмент, который проверяет наличие этих вызовов API.Затем я буду запускать этот инструмент на каждой бета-версии macOS до окончательного выпуска macOS 10.15.Конечно, если этот инструмент показывает проблему, я перепишу «теперь дефектную» программу.

Этого будет достаточно, чтобы обнаружить проблему с существованием API?И какую функцию я могу использовать для определения доступности, фактически не вызывая их, пытаясь установить бинарный файл launchd?Я полагаю, что приведенные выше API являются CoreFoundation?

Заранее спасибо за помощь.

Я нашел это здесь при переполнении стека, и похоже, что оно работает:

#include <dlfcn.h>

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {

    BOOL notFound = NO;

    void *lib = dlopen("/System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement", RTLD_LAZY);

    if(lib == NULL)
    {
        printf("Library not found. (/System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement).\n");
        exit(1);
    }

    void *function1 = dlsym(lib, "SMJobCopyDictionary");

    if(function1 == NULL)
    {
        printf("Function not found: SMJobCopyDictionary\n");
        notFound = YES;
    }

    // .... and so on

    dlclose(lib);

    if(notFound)
    {
        exit(1);
    }

    printf("Ok, all functions found.\n");
}
return 0;

}

будет ли этого достаточно, чтобы показать вызов устаревшему и удаленному API?

1 Ответ

1 голос
/ 29 мая 2019

Это предположение, но я уверен в этом: Apple не удалит эти API из 10.15.Устаревшие API-интерфейсы выполняются регулярно, но на самом деле их удаление разрушает существующие приложения и выполняется очень редко.

Возможно (хотя я думаю, что вряд ли) они удалят заголовки из SDK 10.15, в этом случае вам нужно будет продолжать сборку против SDK 10.14 (используя Xcode 10).

И если SDK 10.15 по-прежнему содержит заголовки, ситуация такая же, как сейчас, и вы не будетеесть какие-то проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...