2012-06-27 14 views
6

Mam aplikację, która przechowuje nazwę użytkownika i hasło w pęku kluczy. Wszystko działa dobrze podczas pracy na Xcode 3, niedawno przeniósł się do Xcode 4, a teraz, kiedy uruchomić aplikację, pojawia się komunikat:Aplikacja zawsze prosi o pozwolenie na dostęp do pęku kluczy

Application wants to use your confidential information stored in keychain" in your keychain.

Po uderzeniu zawsze pozwalają widzę aplikacja dodana do kontroli dostępu lista elementu pęku kluczy, ale otrzymuję go za każdym razem, gdy uruchamiam aplikację.

Po naciśnięciu Zawsze zezwalaj ponownie, widzę, że kontrola dostępu ma dwa wystąpienia tej samej aplikacji. Wygląda na to, że OS myśli, że to nowa aplikacja.

Wszelkie pomysły doceniane.

+0

W jaki sposób podpisujesz kod aplikacji? (To jedna z najczęstszych przyczyn tego problemu.) – abarnert

+0

Muszę kodować zestaw znaków w ustawieniach kompilacji Xcode, Pod szyldem kodu Wybrałem tożsamość podpisywania kodu do mojego identyfikatora programisty Aplikacja –

+0

Czy uruchomiłeś poprzednią kompilację na ta sama maszyna?W zależności od wyznaczonego wymagania (które zależy od wersji Xcode 4, której używasz, jeśli po prostu trzymasz się wartości domyślnych), Keychain może traktować twoją starą kompilację i twoją nową jako różne aplikacje, co oznacza, że ​​pojawi się nowa kompilacja ostrzeżenia, jeśli stara kompilacja zapisała cokolwiek w pęku kluczy. – abarnert

Odpowiedz

3

Uważam, że problem polega na tym, że wyznaczone przez użytkownika podpisy powodują, że nie akceptuje siebie jako "tej samej aplikacji" co ona sama (dla celów Keychain).

Jedną z najczęstszych przyczyn tego - a myślę, że to twoja - jest używanie certyfikatu aplikacji ID dewelopera, bez wyznaczonych wymagań i bez zainstalowanego pośredniego certyfikatu.

standardowy wymóg ID Twórca wygląda następująco:

designated => anchor apple generic and 
identifier \"com.example.appName\" and 
((cert leaf[field.1.2.840.113635.100.6.1.9] exists) or 
(certificate 1[field.1.2.840.113635.100.6.2.6] exists and 
certificate leaf[field.1.2.840.113635.100.6.1.13] exists and 
certificate leaf[subject.OU] = \"1AZBYCXDW9V\")) 

Jeśli chcesz zbudować sam, trzeba zastąpić identyfikator ze swoim identyfikatorem wiązki i subject.OU z wartością z Twojego cert. (Jeśli kliknij go dwukrotnie w Dostęp do pęku kluczy, to powinien być wymieniony jako jednostka organizacyjna). Następnie można dodać do „innych flag podpisywania kodu”:

--requirements "=designated ..." (the whole mess from above) 

jednak o wiele lepszy sposób to zrobić używać Xcode 4.3.2 lub nowszego. Jeśli rozpoznasz, że korzystasz z certyfikatu aplikacji ID programisty i możesz zobaczyć certyfikat pośredni w pęku kluczy, domyślnie to wygeneruje.

Ponadto, jeśli użyjesz Archive Organizer w Xcode do "Eksportowania aplikacji podpisanej przez programistę", zamiast tylko używać kompilacji z katalogu docelowego, będziesz musiał podpisać swoją aplikację i wszelkie inne załączone podpisy, a także sprawdzi, czy wszystko jest poprawnie skonfigurowane. (Usterki są dość zagadkowe - np. Twój "Wybierz ID programisty do podpisania z" krok może po prostu nie mieć wyboru, z komunikatem w dzienniku systemowym, który nie ma użytecznych informacji - ale przynajmniej fakt, że zawiodło lub się udało zwęża tam, gdzie masz problem.)

Tak czy inaczej, musisz pobrać i zainstalować (na komputerze z zainstalowanym kompilatorem) pośredni certyfikat, zwany "Author Certification Authority", z linku "Identyfikator pośredniego certyfikatu programisty" na stronie Developer Certificate Utility .

Jeszcze jedna rzecz: nawet jeśli rozwiązuje to twój problem z uruchomioną maszyną, naprawdę chcesz przetestować najstarszą obsługiwaną wersję systemu operacyjnego. Na przykład, wymagania zebrane przez kodowanie Lwa czasami nie mogą być analizowane w systemie Leopard, a czasami nawet w systemie Snow Leopard. Jeśli tak się stanie ... zobacz Gatekeeper vs. Leopard: an ongoing tale.

+0

Dzięki abarnert, było dużo świetnych informacji. Ale wygląda na to, że znalazłem rozwiązanie tego problemu. Usunąłem podpisywanie kodu z interfejsu użytkownika w Xcode i dodałem to jako krok wiersza poleceń na końcu mojego skryptu kompilacji. Wydaje się, że teraz działa dobrze, ale naprawdę, bardzo dziękuję za całą pomoc. –

+1

Nitin, możesz podzielić się swoją rozdzielczością, mam ten sam problem z Xcode 6 –

Powiązane problemy