Как получить доступ к сертификату разработчика iOS из кода

есть ли способ узнать, с каким приложением сертификата был подписан?

Я хочу защитить приложение от отставки с другим сертификатом разработчика.

предположим, у нас есть клиент-серверное приложение. И сервер держит это уникальный ключ, связанный с сертификатом разработчика.

таким образом, с каждым запросом на сервер мы передадим этот ключ, и если приложение будет повторно собрано с сертификатом другого разработчика, то сервер будет знать этот.

Это возможно? Или есть другой способ защититься от отставки?

1 ответов


вы можете узнать сертификат и профиль подготовки, используемый для подписания приложения, вручную проанализировав данные в embedded.mobileprovision файл, который включен в пакет приложений. Если вы просмотрите файл, вы увидите информацию о сертификате и профилях.

вот пример того, как получить встроенные данные профиля из вашего приложения программно:

NSString* bundleDirectory = [[NSBundle mainBundle] bundlePath];
NSString* db = [NSString stringWithFormat:@"%@/embedded.mobileprovision", bundleDirectory];
NSData* data = [NSData dataWithContentsOfFile:db];
// parse through the data to get your provisioning profile info. I'd recommend opening up the profile that is inside your .app to see how it is structured.

однако:

Я не уверен, почему вам нужно это сделать, так как никто не может повторно подписать ваше приложение, если у них нет правильного сертификата, соответствующего профилю подготовки, сделанному для идентификатора пакета вашего приложения.

единственный способ получить это-иметь учетные данные учетной записи разработчика apple, которой принадлежит идентификатор пакета, или если кто-то "получил доступ" к вашему сертификату и профилю подготовки.

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