2016-09-19 21 views
14

Po ostatnich zmianach Apple wymaga określonych kluczy, jeśli aplikacja próbuje uzyskać dostęp do danych poufnych. Więc dodałem klucz NSCameraUsageDescription w moim config.xml tak:Cordova Info.plist Brak klucza NSCameraUsage

<platform name="ios"> 
    <config-file parent="NSCameraUsageDescription" target="*-Info.plist"> 
     <string>We are using a camera to </string> 
    </config-file> 
</platform> 

Następnie

cordova build ios --release --device 

produkuje IPA, który najwyraźniej nie ma prawa info w Info.plist. Czuję, że czegoś brakuje.

Pytanie 1: Co muszę umieścić w pliku config.xml, aby rozwiązać problem NSCameraUsageDescription? Pytanie 2: Czy można użyć lokalizacji dla tego ciągu?

Dziękujemy!

Odpowiedz

10

NOWA ODPOWIEDŹ:

Od Cordova CLI 6.5.0 można napisać w info.plist bezpośrednio za pomocą znacznika edit-config w config.xml tak:

<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge"> <string>your usage message</string> </edit-config> ale upewnij się, używasz najnowszej wersji wtyczki lub wartości mogą zostać nadpisane przez zmienne wtyczki.

OLD ODPOWIEDŹ:

Nie można pisać na info.plist z config.xml użyciu jeszcze tag config-file (jest w trakcie opracowywania)

Najnowsza wersja wtyczki aparatu pozwala dodać NSCameraUsageDescription gdy jest zainstalować wtyczkę

cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="your usage message"

teraz to nie jest możliwe, aby zlokalizować ten ciąg

+0

Nie wiem jeśli obsługa została usunięta, ale użyłem tagu 'edit-config' dla kamery cordova plugin https://github.com/apache/cordova-plugin-camera#ios-quirks – kmanzana

+1

Tak, rezygnujemy z tego, ale nie zostało to jeszcze wydane. Zostanie to wykonane za kilka dni w wersji głównej (3.0.0). Nie powinno to wpłynąć na ciebie, chyba że instalujesz z adresu URL github zamiast z npm – jcesarmobile

+0

@jcesarmobile co z Q2? Czy można użyć lokalizacji dla tego ciągu? –

6

Oto wyniki moich badań:

    • Tak, można zmodyfikować info.plist z config.xml plik pomocą znacznika config-file, ale musisz użyć wtyczki do tego (cordova custom config) i postępuj zgodnie z instrukcjami religijnie.
    • Jednak prawdopodobnie lepszym rozwiązaniem jest użycie plugin.xml, aby zrobić to samo.Więcej na ten temat można przeczytać tutaj (modifying info plist from plugin.xml)
    • Inną opcją jak @jcesarmobile wspomniano - aktualny plugin kamera może wspierać go jak cordova plugin camera (tego rozwiązania jest specyficzne dla wtyczki)
    • Tak, to jest możliwe do localize a string inside the info.plist file, ale wymaga to użycia xcode. Nie jestem pewien, w jaki sposób zlokalizować ciąg wewnątrz pliku Info.plist użyciu Cordova config.xml lub plugin.xml

Proszę mnie poprawić jeśli się mylę. Więcej informacji na temat lokalizacji bezpośrednio z config.xml jest docenione.

Osobiście nie podoba mi się pomysł użycia niestandardowej wtyczki do modyfikacji pliku info.plist. Wydaje się, że przy każdej nowej wtyczce używam, aby moja aplikacja była coraz bardziej delikatna. :)

+0

Czy znalazłeś sposób na zlokalizowanie ciąg od config.xml lub innych wtyczek cordova? Dzięki! –

+1

@MathieuG Jedynym sposobem, jaki znalazłem do tej pory, jest użycie wbudowanej funkcji xcode (która w zasadzie tworzy różne pliki info.plist dla każdego języka). Wadą tego podejścia jest oczywiste: jeśli zrobisz "platformę cordova rm ios"/"platformę cordova dodaj ios", stracisz wszystkie swoje zmiany. Proponuję zlokalizować Info.plist jako ostatni krok, gdy wszystko inne jest skonfigurowane poprawnie ... jeśli będziesz w stanie znaleźć lepszy sposób na zrobienie tego, proszę ping do mnie! :-) –

+0

Pomogło mi to w rozwoju aplikacji jonic2, dziękuję – Luckylooke

1

można ręcznie edytować plik .plist ramach projektu Cordova, jeśli chcesz. To działało dla mnie, ale ponieważ jest to wygenerowany plik, martwię się w pewnym momencie, że moje zmiany mogą zostać nadpisane.

Ale na pomoc!

Plik .plist powinien znajdować się w ramach projektu Cordova w ramach numeru /platforms/ios/[Cordova Project Name]/[Cordova Project Name]-Info.plist. Możesz także otworzyć projekt w Xcode i po lewej stronie kliknąć ikonę Magnifier, która pozwoli ci wyszukać pliki w projekcie. Jeśli wpiszesz w info.plist powinna zwrócić wynik, który pokazuje coś takiego:

INFOPLIST_FILE = [Some]/[Path]/[Cordova Project Name]-Info.plist

Ta droga powinna być w stosunku do projektu Cordova zainstalować więc poszukiwania w ramach projektu powinny prowadzić do właściwego pliku.

otworzyłem ten plik w moim edytorze i dodać następujące wiersze tylko wewnątrz pierwszego otworu <dict> tag:

<key>NSCameraUsageDescription</key> <string>Uses camera to allow video chatting between two clients</string>

udało mi się złożyć i mieć mój build pokazać się i pobyt w itunesconnect. Obecnie wciąż czeka na recenzję aplikacji.

Uruchomiłem tylko po to, aby przetestować, czy moje zmiany zostaną nadpisane, a które nie, więc wygląda na to, że powinieneś być w stanie to zrobić i nie martwić się o to, ale bądź zmęczony innymi programistami instalującymi aplikację i działającymi w ten sam problem. Właśnie skopiowałem mój zaktualizowany plik .plist do katalogu głównego mojego repozytorium i zanotowałem go w pliku readme.

0
$ cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="this app will use your camera" --variable PHOTOLIBRARY_USAGE_DESCRIPTION="this app will access to your photo library" 

Musisz przeczytać wewnątrz ./plugins/plugin-what-ever/plugin.xml aby zobaczyć, jakie nazwy kluczy są obsługiwane.

0

idź do projektu >> Otwórz Terminal tam

i uruchomić to polecenie

cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="Allow the app to use your camera" --variable PHOTOLIBRARY_USAGE_DESCRIPTION="Allow the app to access your photos" 

enter image description here

można zachować zmodyfikować wartości "Zezwalaj aplikacji na korzystanie z kamery" „Zezwalaj aplikację, aby uzyskać dostęp do zdjęć "w zależności od potrzeb.

2

Po pierwsze, działa to dla mnie z Cli-7.1.0 po tym, jak jabłko odrzuciło mnie ipa.

1) W kodzie, jeśli używasz np. cordova-plugin-barcodescanner i cordova-plugin-kamera i cordova-plugin-ios-camera-permissions wszystkie zmienne CAMERA_USAGE_DESCRIPTION, PHOTOLIBRARY_USAGE_DESCRIPTION powinny mieć ten sam ciąg wewnątrz. Jeśli jedno z nich jest inne, jabłko odrzuca twoje ipa, ponieważ phonegap używa domyślnej zmiennej.

EJ:

<plugin name="cordova-plugin-ios-camera-permissions" > 
    <variable name="CAMERA_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" /> 
    <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" /> 
</plugin><!-- spec="1.0.3" !--> 

<plugin name="cordova-plugin-camera" > 
    <variable name="CAMERA_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" /> 
    <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" /> 

<gap:plugin name="cordova-plugin-image-picker" source="npm" /> 
<gap:plugin name="cordova-plugin-base64-joewsh" source="npm" /> <!-- convertir a base64 los files !--> 


<!-- barcode la v.0.7.2 tiene problemas, ojo !--> 
<gap:plugin name="cordova-plugin-barcodescanner" source="npm" spec="0.7.0" > 

    <variable name="CAMERA_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" /> 
</gap:plugin> 

2) dodać ten kod (pamiętaj, aby używać tego samego ciąg w zmiennych, jak wspominam wcześniej):

<platform name="ios"> 

    <edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge" overwrite="true"> 
      <stringYOUR-PERMISSION-REQUEST</string> 
    </edit-config> 
    <edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="merge" overwrite="true" > 
      <string>YOUR-PERMISSION-REQUEST</string> 
    </edit-config> 
    <edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge" overwrite="true"> 
      <string>YOUR-PERMISSION-REQUEST</string> 
    </edit-config> 
</platform>