Lỗi Appstore kết nối: Thiếu chuỗi mục đích trong tệp Info.plist


152

Tôi đã gửi ứng dụng của mình để xem xét tới App Store Connect. Mặc dù ứng dụng vẫn đang được xem xét, tôi đã nhận được email để thông báo cho tôi rằng tôi phải sửa lỗi. Dưới đây là nội dung của tin nhắn:

Kính gửi nhà phát triển,

Chúng tôi đã xác định một hoặc nhiều vấn đề với việc phân phối gần đây cho ứng dụng XXXXX của bạn. Giao hàng của bạn đã thành công, nhưng bạn có thể muốn sửa các vấn đề sau trong lần giao hàng tiếp theo:

"Thiếu chuỗi mục đích trong tệp Info.plist. Mã ứng dụng của bạn tham chiếu một hoặc nhiều API truy cập dữ liệu người dùng nhạy cảm. Tệp Info.plist của ứng dụng phải chứa khóa NSLocationAlwaysUsageDes mô tả với chuỗi mục đích hướng tới người dùng giải thích rõ ràng và hoàn toàn lý do tại sao ứng dụng của bạn cần bắt đầu từ mùa xuân năm 2019, tất cả các ứng dụng được gửi tới App Store truy cập dữ liệu người dùng sẽ được yêu cầu bao gồm chuỗi mục đích. Nếu bạn đang sử dụng thư viện hoặc SDK bên ngoài, họ có thể tham chiếu API yêu cầu chuỗi mục đích. Trong khi ứng dụng của bạn có thể không sử dụng các API này, vẫn cần một chuỗi mục đích. Bạn có thể liên hệ với nhà phát triển thư viện hoặc SDK và yêu cầu họ phát hành phiên bản mã không chứa API.

Sau khi bạn khắc phục sự cố, bạn có thể sử dụng Xcode hoặc Trình tải ứng dụng để tải lên tệp nhị phân mới lên iTunes Connect.

Trân trọng,

Nhóm App Store

Ứng dụng của tôi được xây dựng hoàn chỉnh với Expo và tôi không biết cách truy cập và sửa đổi Info.plist.

Bất kỳ ý tưởng?


3
Tôi đang gặp vấn đề tương tự với bản dựng mới nhất, do tôi thậm chí không sử dụng Dịch vụ vị trí trong ứng dụng của mình. Và Apple không có tài liệu chính thức về sự thay đổi này.
huong

3
+1 Đã phát hành cho cùng một ứng dụng 2 ngày trước và mọi thứ đều ổn. 2 ngày sau, chỉ cần thay đổi một vài dòng mã để thực hiện một bản phát hành mới (không thêm nhiều Pods hay đại loại như thế) và tôi nhận được tin nhắn này
Tiago Ornelas

2
Chúng tôi đã trải qua vấn đề tương tự. Tôi nghi ngờ đó là một lỗi trong quá trình phê duyệt (hy vọng). Tôi sẽ bỏ qua cho cuối tuần và hy vọng rằng nó sẽ được sửa vào thứ Hai.
AMB

2
Tôi đã phải đối mặt với cùng một vấn đề chính xác ngay bây giờ mặc dù Ứng dụng của chúng tôi không thực sự cần Dịch vụ vị trí luôn. Nó chỉ cần NSLocationWhenInUseUsageDes mô tả mà chúng tôi đã có một chuỗi mục đích cho. Có lẽ đây chỉ là một trục trặc về kết thúc của Apple?
ilight

3
Và trong thời trang Apple, liên kết họ cung cấp trong email để sửa nó, đã bị hỏng.
gwalshington

Câu trả lời:


45

Nếu bạn đang sử dụng Expo, bạn có thể thêm giải quyết bằng cách thêm infoPlist vào app.json như vậy:

  "expo": {
     "ios": {
       "bundleIdentifier": "com.app.myapp",
       "infoPlist": {
         "NSLocationAlwaysUsageDescription": "Some message to appease Apple.",
       },
     },
   }

Tài liệu hội chợ


25
Trên thực tế, đó không phải là "một số thông điệp để xoa dịu Apple" mà là để cho người dùng biết bạn đang làm gì với dữ liệu (vị trí) do người dùng tạo trong trường hợp này. Đây là một vấn đề liên quan đến quyền riêng tư và tôi nghĩ thật tốt khi công bằng với người dùng ứng dụng của bạn.
Lookaji

4
Gotcha! Tôi đã suy nghĩ cho những người mới có thể bị cám dỗ để rời khỏi nó như vậy! Tôi không muốn nghe khó chịu :) chúc mừng!
Lookaji

@gwalshington Tôi không có bất kỳ đối tượng triển lãm nào trong app.json
Heemanshu Bhalla

@HeemanshuBhalla hmm, tôi không chắc tại sao. Trong app.json của tôi, nó ở trên cùng và đối tượng đầu tiên được khai báo. Đó là nơi bạn khai báo số phiên bản, số nhận dạng gói, v.v ... Nếu bạn đã gỡ bỏ ứng dụng, có thể nó trông hơi khác?
gwalshington

2
Văn bản nào để nhập nếu chúng tôi không thu thập và dữ liệu Vị trí? Chúng ta cần phải nói dối: S
Primož Kralj

62

EDIT tháng 4 năm 2019 : Bây giờ bạn phải thêm hai khóa này, vì mùa xuân 2019 đã bắt đầu. Lưu ý rằng NSLocationAlwaysUsageDescriptionhiện không được chấp nhận (kể từ iOS 11) và đã được thay thế bằng NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription. Nếu bạn muốn hỗ trợ thấp hơn iOS 11, bạn sẽ phải sử dụng ba giá trị.

Để tổng hợp, bạn phải:

  • Thêm NSLocationAlwaysAndWhenInUseUsageDescriptionAND NSLocationWhenInUseUsageDescriptioncho iOS 11 trở lên
  • Và thêm NSLocationAlwaysUsageDescriptionnếu bạn muốn hỗ trợ iOS 10 trở xuống
  • Và cuối cùng, bạn có thể thêm NSLocationUsageDescriptionnếu bạn muốn hỗ trợ iOS 8 trở xuống.


Bạn có thể gửi ứng dụng của mình ngay cả khi bạn nhận được thông báo này!

Tôi vừa gặp vấn đề tương tự ngày hôm qua, ngay cả khi ứng dụng không sử dụng chức năng định vị. Nó có thể liên quan đến một số khung có trong dự án có tính năng tùy chọn này.

Tôi có thể xác nhận rằng ứng dụng của tôi đã được phê duyệt ngay cả khi không có NSLocationAlwaysUsageDescriptionvà nhập NSLocationWhenInUseUsageDescriptionvàoinfo.plist

Thật vậy, như Apple đã nêu trong thư:

Bắt đầu từ mùa xuân 2019, tất cả các ứng dụng được gửi tới App Store truy cập dữ liệu người dùng sẽ được yêu cầu bao gồm chuỗi mục đích.

Vì vậy, điều duy nhất cần làm là thêm khóa này (ngay bây giờ là tốt hơn, để bạn không quên) trong dự án của bạn để nó sẽ được bao gồm trong bản cập nhật tiếp theo của bạn .

Chỉ cần thêm hai mục nhập mới info.plist, với NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescriptiondưới dạng khóa và mô tả ngắn về lý do bạn sử dụng chúng làm giá trị (ngay cả khi bạn không thực sự sử dụng chúng ...).


2
Trong lần chỉnh sửa tháng 4 năm 2019 của bạn, bạn có chắc chắn rằng bạn không có sự phản đối không? Từ những gì tôi thấy NSLocationUsageDes mô tả là không được chấp nhận. Nhìn vào đây: developer.apple.com/l
Library / archive / document / General / trên

Email tôi nhận được từ apple đề cập đến NSLocationAlwaysUsageDes mô tả vì vậy tôi nghĩ rằng anh ta đã đảo ngược nó.
Dror Bar

@apricity @DrorBar Xin lỗi các bạn, thực sự tôi đã phạm sai lầm. Nó không được đảo ngược nhưng vẫn có một sai lầm, NSLocationAlwaysUsageDescriptionnên được thay thế bằng NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription , và không phải do NSLocationUsageDescription(như trước đây tôi đã viết, xin lỗi ...). Tôi đã cập nhật câu trả lời của mình để thêm tổng hợp của quá trình.
AnthoPak

48

Tôi có một số ứng dụng trong cửa hàng và tôi đã cố gắng phân phối một phiên bản cho QA và điều tương tự đã xảy ra trong hai Ứng dụng khác nhau. Tôi nghĩ rằng đây là một tiêu chí mới để chấp nhận các bản dựng tải lên kết nối Appstore.

Giải pháp rất đơn giản, hãy thêm các dòng sau vào tệp .plist.

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

PS: Trong trường hợp của tôi không sử dụng bất kỳ tính năng nào của vị trí, nhưng tôi đã thêm các dòng này để tuân thủ các nguyên tắc kết nối của Appstore. Btw sau khi nhận được email đó, tôi có thể kiểm tra ứng dụng ngay cả khi họ nói rằng việc xây dựng nó có một số vấn đề.

Tôi hy vọng công việc này cho các bạn.


5
Wow, tôi vừa nhận được điều này, nhận ra tất cả mọi người cũng đang nhận được điều này!
Cameron A. Ellis

khóa đầu tiên đã thay đổi từ bây giờ thành<key>NSLocationUsageDescription</key>
Hudi Ilfeld

1
Chúng tôi có phải lưu trữ lại sau khi cập nhật thông tin.plist không?
Bishoy Hanna

Tôi có phải tăng phiên bản gói hoặc số phiên bản để tải lên tệp nhị phân mới không?
Dror Bar

20

Đó là một yêu cầu mới từ apple, ngay cả khi bạn không sử dụng vị trí. Nếu bạn muốn thêm quyền trong Xcode, hãy tìm "Quyền riêng tư - Mô tả sử dụng vị trí" và "Quyền riêng tư - Vị trí khi sử dụng Mô tả sử dụng" và nhập một chuỗi tùy chỉnh cho từng loại.

nhập mô tả hình ảnh ở đây


1
Trong bản cập nhật ứng dụng khác, Apple cũng yêu cầu quyền này: "Quyền riêng tư - Vị trí luôn sử dụng Mô tả"
Juan José Ramírez

2
Vì vậy, nếu tôi không sử dụng các tính năng này, những gì tôi phải viết ở đó, một lời nói dối, đại loại như "thu thập vị trí để sử dụng trong tương lai, có thể"?
Ruslan Shashkov

vâng, apple sẽ liên lạc với bạn nếu họ có thắc mắc
Juan Jose Ramírez

Tôi không thể tìm thấy Danh sách tài sản thông tin trong xcode 10.1 của mình, bạn nên đề cập đến nơi tìm thấy nó, tôi đã tìm Cài đặt xây dựng cho cả mục tiêu và dự án
Awais Nasir

1
Được rồi, mục tiêu-> Thông tin-> Thuộc tính mục tiêu ios tùy chỉnh là vị trí chính xác
Awais Nasir

15

Để đơn giản hóa hơn, bạn có thể thêm các dòng này trong thông tin của mình. Những lỗi này đang đến vì Bắt đầu từ mùa xuân năm 2019, tất cả các ứng dụng được gửi tới App Store để truy cập dữ liệu người dùng sẽ được yêu cầu bao gồm một chuỗi mục đích.

  1. Mở thông tin.plist dưới dạng mã nguồn.
  2. Thêm các dòng sau trong danh sách của bạn

    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>

2
Tôi đã phải xóa thêm khoảng trắng trong thẻ <key> và sau đó nó hoạt động.
innich

@innich cảm ơn bạn đã chỉ ra, tôi đã thay đổi câu trả lời của tôi.
Sachin Nautiyal

8
## Sử dụng khóa này trong tệp info.plist

NSLocationAlwaysUsageDes mô tả Vị trí của bạn là cần thiết cho các lợi ích xyz cho bạn NSLocationWhenInUseUsageDes mô tả Vị trí của bạn là cần thiết cho các lợi ích xyz cho bạn


8

Chúng tôi đã nhận được cùng một email và chúng tôi hoàn toàn không sử dụng CoreLocation. Sau khi tìm kiếm nhanh, chúng tôi thấy rằng Parse SDK có thể sử dụng CoreLocation. Trong email của Apple, họ nói rõ ràng:

Nếu bạn đang sử dụng các thư viện hoặc SDK bên ngoài, họ có thể tham chiếu các API yêu cầu chuỗi mục đích.

Điều đó có nghĩa là phút mà mã của bạn hoặc bất kỳ Thư viện hoặc SDK nào khác có thể sử dụng CoreLocation, ngay cả khi bạn không sử dụng nó, bạn cần cung cấp mô tả quyền riêng tư cho "Khi sử dụng" và "Luôn sử dụng".

Nó cũng là một cái gì đó mới từ Apple và hiện tại nó chỉ là một cảnh báo nhưng nó sẽ được yêu cầu bắt đầu vào mùa xuân 2019 cho các bài nộp mới.


Thật là ngu ngốc .... Nếu tôi không sử dụng nó, nó có thể khiến mọi người không tải xuống ứng dụng của tôi chỉ vì điều đó. -_-
Mayoul

3
Không hẳn vậy. Cảnh báo yêu cầu bạn sử dụng bản địa hóa của mình sẽ không hiển thị trừ khi ở đâu đó trong mã CLLocationManager.requestWhenInUseAuthorization()được gọi. Apple đã phân tích từng mã ứng dụng để xem liệu một chức năng như vậy có thể được gọi hay không. Nếu nó không bao giờ được gọi, cảnh báo sẽ không xuất hiện.
sebleclerc

6

Vấn đề này xảy ra vì bạn chưa bao gồm

 <NSLocationAlwaysUsageDescription>

cho ứng dụng của bạn. Tôi đã gặp vấn đề tương tự khi tôi cố gắng gửi ứng dụng của mình trên AppStore. Sau khi ứng dụng được xử lý, tôi nhận được cùng một thư. Tôi chỉ cần thêm mô tả và bây giờ nó đã được giải quyết.

Hi vọng điêu nay co ich.


Điều này đã giúp tôi. Nếu bạn đang sử dụng Vị trí trong ứng dụng của mình (hoặc có thể chỉ luôn luôn), bạn cần thêm dòng này và một chuỗi bên dưới nó. <key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>
MaylorTaylor

6

Có những trường hợp sau:

NSLocationAlwaysAndWhenInUseUsageDescription (iOS>11)
NSLocationWhenInUseUsageDescription          (iOS>11)
NSLocationAlwaysUsageDescription             (iOS<=10)
NSLocationUsageDescription                   (seems very old, iOS8?)

Apple tuyên bố tại:

Thêm NSLocationWhenInUseUsageDescriptionkhóa và NSLocationAlwaysAndWhenInUseUsageDescriptionkhóa vào tệp Info.plist của bạn .

và:

Nếu ứng dụng của bạn hỗ trợ iOS 10 trở về trước, hãy thêm NSLocationAlwaysUsage

NSLocationUsageDescriptiondường như đã chết, giới thiệu duy nhất trong trang web ADC là: https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf

Vì vậy, để chắc chắn, sử dụng 3 đầu tiên.


3

Tất cả các câu trả lời này đều cho bạn biết cách tuân thủ các quy tắc của App Store để tránh cảnh báo nhưng cách khắc phục thực sự sẽ dành cho Expo để cho phép bạn vô hiệu hóa yêu cầu SDK của họ đối với Dịch vụ vị trí trừ khi bạn thực sự sử dụng chúng - Tôi không chắc đây có phải là khả thi.


3

cùng một vấn đề vào ngày 19 tháng 2, nhận được một email với một loạt các quyền mà tôi không sử dụng, tôi cho rằng chúng là từ các plugin. Apple cho biết vào ngày 19 tháng 3, đây là một yêu cầu vì vậy tôi sẽ thêm những thứ này vào info.plst và tải lên lại.

Nó thực sự rất ngớ ngẩn.


2
Thêm một nhận xét thực sự ...?
Steve

3

Tôi cũng đối mặt với vấn đề tương tự nhưng sau 27 giờ, tôi nhận được email về việc phê duyệt thậm chí tôi không làm gì cả. Vì vậy, hãy đợi khoảng 24 giờ thay vì thực hiện lại toàn bộ quá trình này.


1
Vâng, đó là một lỗi!
Danh Huynh

2

Tôi đã <key>NSLocationWhenInUseUsageDescription </key> thay vì <key>NSLocationWhenInUseUsageDescription</key>

hãy chắc chắn để xóa khoảng trắng


2

Vui lòng xem lại email bạn nhận được từ ** App Store Connect **

Xác định khóa thiếu nhập mô tả hình ảnh ở đây

Hướng dẫn

  1. Mở tập tin info.plist.

  2. Thêm và tìm kiếm khóa bị thiếu từ các tùy chọn được cung cấp (ví dụ: Danh bạ = Quyền riêng tư - Mô tả sử dụng danh bạ)

  3. Thêm mô tả sử dụng:

$ (PRODUCT_NAME) cần Liên hệ truy cập vào "Cung cấp lý do tại đây".

Thí dụ:


1
thưa ngài, tôi đã gặp lỗi tương tự nhưng tại sao lại thêm vào info.plist thực sự tôi không sử dụng tính năng liên hệ trong ứng dụng của mình vậy tại sao chúng ta cần thêm nó?
Kapil soni

@Kapilsoni Vui lòng đảm bảo bạn không truy cập một hoặc nhiều API có quyền truy cập vào dữ liệu người dùng nhạy cảm
Zeus

1
: thưa ông, tôi chỉ sử dụng máy ảnh và vị trí trong ứng dụng của mình?
Kapil soni

2

Với Xcode 11, sao chép khóa NSLocationAlwaysUsageDescriptionvà thêm mã này vào Info-> Custom iOS Target Properties-> Nhấp vào +ở dưới cùng bên trái của tab này và dưới dạng giá trị chèn một số loại mô tả như thế nào This app requires location access to function properly..


2

"Thiếu chuỗi mục đích trong tệp Info.plist. Mã ứng dụng của bạn tham chiếu một hoặc nhiều API truy cập dữ liệu người dùng nhạy cảm. Tệp Info.plist của ứng dụng phải chứa khóa NSLocationAlwaysUsageDes mô tả với chuỗi mục đích hướng tới người dùng giải thích rõ ràng và hoàn toàn lý do tại sao ứng dụng của bạn cần bắt đầu từ mùa xuân năm 2019, tất cả các ứng dụng được gửi tới App Store truy cập dữ liệu người dùng sẽ được yêu cầu bao gồm chuỗi mục đích. Nếu bạn đang sử dụng thư viện hoặc SDK bên ngoài, họ có thể tham chiếu API yêu cầu chuỗi mục đích. Trong khi ứng dụng của bạn có thể không sử dụng các API này, vẫn cần một chuỗi mục đích. Bạn có thể liên hệ với nhà phát triển thư viện hoặc SDK và yêu cầu họ phát hành phiên bản mã không chứa API.

Mở thông tin.plist dưới dạng mã nguồn.
Thêm các dòng sau trong danh sách của bạn

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>

1

Ứng dụng của tôi cũng nhận được điều đó và tôi không làm gì về nó nhưng nó có thể chạy tốt, lần sau tôi nghĩ nên thêm khóa như vậy vào phần chính, chỉ cần làm một số mô tả


1

Một câu trả lời ngắn cho vấn đề trên -

NSLocationAlwaysUsageDescription phải được cập nhật với mô tả sau trong tệp Info.plist

{Tên ứng dụng của bạn} yêu cầu quyền truy cập vào vị trí để đề xuất các vùng bùng phát sốt xuất huyết.


0

Trong trường hợp của chúng tôi, chúng tôi đã sử dụng NSLocationWhenInUseUsageDescriptiontrong ứng dụng của mình, nhưng không NSLocationAlwaysUsageDescription.

Đọc từ các ý kiến ở đây (cảm ơn matt-oakes), có vẻ nhưNSLocationAlwaysUsageDescription đang được sử dụng bởi một trong những khung phụ thuộc mà chúng ta sử dụng.

Chạy ứng dụng của chúng tôi, nó không hiển thị phương thức cấp phép NSLocationAlwaysUsageDes mô tả thực tế, do đó có vẻ như chỉ xử lý việc này trong nền.

Vì vậy, tóm lại, việc thêm NSLocationAlwaysUsageDescriptionvào Info.plist đã sửa email cảnh báo và không thay đổi bất kỳ hành vi nào trong ứng dụng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.