2011-08-26 17 views
6

Tôi gửi Ứng dụng của mình đến Cửa hàng ứng dụng và sau khi xem xét ứng dụng bị từ chối. Lý do khỏi Apple là:nhầm lẫn về: (2.5) Các ứng dụng sử dụng API không công khai sẽ bị từ chối


2,5: Ứng dụng sử dụng API ngoài công lập sẽ bị từ chối

* Chúng tôi nhận thấy rằng ứng dụng của bạn sử dụng một hoặc nhiều API ngoài công lập, mà không phải là trong tuân thủ Nguyên tắc đánh giá của App Store. Việc sử dụng các API không công khai không được phép vì có thể dẫn đến trải nghiệm người dùng kém nếu các API này thay đổi. Chúng tôi nhận thấy các API ngoài công lập sau đây trong ứng dụng của bạn:

dateWithCalendarFormat: TimeZone:

HOUROFDAY

minuteOfHour

secondOfMinute

setNavigationBar:

Nếu bạn đã xác định các phương thức trong mã nguồn của bạn có cùng tên với các API được đề cập ở trên , chúng tôi khuyên bạn nên thay đổi tên phương thức để chúng không còn va chạm với các API riêng tư của Apple để tránh ứng dụng của bạn bị gắn cờ trong các lần gửi trong tương lai.

Ngoài ra, một hoặc nhiều API nêu trên có thể nằm trong thư viện tĩnh đi kèm với đơn đăng ký của bạn. Nếu bạn không có quyền truy cập vào nguồn của thư viện, bạn có thể tìm kiếm tệp nhị phân được biên dịch bằng cách sử dụng các công cụ dòng lệnh "chuỗi" hoặc "otool". Công cụ "strings" có thể xuất ra một danh sách các phương thức mà các thư viện gọi và "otool -ov" sẽ xuất ra các cấu trúc lớp Objective-C và các phương thức đã định nghĩa của chúng. Những kỹ thuật này có thể giúp bạn thu hẹp vị trí của mã có sự cố. *


Nhưng, vấn đề là tôi không khai báo hoặc xác định bất kỳ phương pháp nào có tên như các API nêu trên. Và tôi đã không sử dụng bất kỳ thư viện tùy chỉnh nào. Nó là ứng dụng khá đơn giản (planer) và tôi chỉ sử dụng: UIKit, CoreData, AVFoundation, Foundation và EventKit.

Tôi gửi tin nhắn cho Apple hôm qua, nhưng vẫn không có câu trả lời.

Bất kỳ ý tưởng nào?

+0

Nhanh chóng grep mã nguồn của bạn cho các phiên bản của một trong các trường hợp này (ví dụ: 'secondOfMinute'). Họ có bật lên ở đâu không? –

+0

Nếu bạn không gọi bất kỳ mã nào của Apple có sử dụng API riêng tư và bạn đã liên hệ với họ, hãy chờ phản hồi. – Moshe

+0

Phương thức dateWithCalendarFormat: timeZone :, hourOfDay, minuteOfHour và secondOfMinute Tôi chỉ sử dụng một lần trong mã của mình: int hour = [[[date Ngày tháng] ngàyWithCalendarFormat: nil timeZone: nil] hourOfDay]; int min = [[[datePicker date] dateWithCalendarFormat: nil timeZone: nil] minuteOfHour]; int sec = [[[datePicker date] dateWithCalendarFormat: nil timeZone: nil] secondOfMinute]; trong đó datePicker là đối tượng từ lớp UIDatePicker: @property (nonatomic, retain) IBOutlet UIDatePicker * datePicker; Điều tương tự trong phương thức setNavigationBar. Tôi không khai báo hoặc xác định những phương pháp đó. –

Trả lời

4

Bạn biết trong các ý kiến ​​ở trên, bạn sử dụng

[[[datePicker date] dateWithCalendarFormat:nil timeZone:nil] hourOfDay] 

Bây giờ, [datePicker date] trả về một NSDate, mà documentation cho thấy không có phương pháp nào có tên dateWithCalendarFormat:timezone: cũng không hourOfDay, vv

Vì vậy, bạn không thể chỉ sử dụng chúng.

Đối với setNavigationBar:, thuộc tính navigationBar của UINavigationController là thuộc tính chỉ đọc, như tài liệu nói. Do đó bạn không thể đặt nó.

Khi bạn biên dịch ứng dụng, trình biên dịch đã phát hành rất nhiều cảnh báo về nó, nói rằng bộ chọn không được tìm thấy, v.v. Bạn nên luôn coi những cảnh báo này là lỗi và loại bỏ chúng. Bằng cách này, bạn có thể tránh bị từ chối sau khi gửi.

+0

Có, tôi thấy chỉ vài phút trước, và tôi đã thay đổi điều đó. Nhưng còn phương thức setNavigationBar thì sao ??? –

+0

dateWithCalendarĐịnh dạng: múi giờ: không được đề xuất thêm ... nhưng vấn đề với setNavigationBar: UINavigationBar * bar = [[UINavigationBar alloc] init]; bar.barStyle = UIBarStyleBlackOpaque; [opla setNavigationBar: bar]; [opla.navigationBar setTintColor: self.navigationController.navigationBar.tintColor]; [opla.navigationBar setBarStyle: self.navigationController.navigationBar.barStyle]; –

+0

Được rồi, xem cập nhật của tôi. – Yuji