Trang này cung cấp các mẹo và cách khắc phục sự cố dành riêng cho nền tảng Apple mà bạn có thể gặp phải khi sử dụng Firebase.
Bạn gặp phải vấn đề khác hoặc không thấy vấn đề của mình được nêu ở bên dưới? Hãy nhớ xem các câu hỏi thường gặp chính về Firebase để biết thêm câu hỏi thường gặp về Firebase nói chung hoặc về từng sản phẩm.
Bạn cũng có thể xem kho lưu trữ GitHub của SDK nền tảng Apple Firebase để biết danh sách mới nhất về các vấn đề đã báo cáo và cách khắc phục sự cố. Bạn cũng nên gửi các vấn đề liên quan đến SDK Firebase cho nền tảng Apple của riêng mình tại đó!
Firebase hỗ trợ những phiên bản Xcode nào?
Firebase hỗ trợ tối đa hai phiên bản chính của Xcode, không bao gồm các phiên bản Xcode mà Apple không còn hỗ trợ. Ví dụ: bắt đầu từ tháng 3 năm 2019, Apple yêu cầu ít nhất là iOS 12 trên tất cả ứng dụng, nghĩa là tính năng hỗ trợ Xcode 9 đã bị loại bỏ và Xcode 10 là phiên bản chính duy nhất được hỗ trợ.
Các thay đổi để hỗ trợ các phiên bản nhỏ hoặc bản vá cụ thể của Xcode (ví dụ: 9.2.0 đến 9.4.1) được xác định dựa trên nhu cầu của SDK nền tảng Apple Firebase và khảo sát về mức sử dụng của nhà phát triển. Những thay đổi này được phản ánh trong Ghi chú phát hành SDK cho nền tảng Apple của Firebase và trên trang thiết lập SDK cho nền tảng Apple của Firebase.
Để xem phiên bản Xcode tối thiểu mà SDK hỗ trợ, hãy kiểm tra các yêu cầu được liệt kê trong phần Thêm Firebase vào dự án Apple.
Firebase hỗ trợ các bản phát hành Beta của Xcode ở mức "tốt nhất có thể". Nhà phát triển có thể theo dõi và gửi vấn đề trong kho lưu trữ SDK của Firebase cho nền tảng Apple trên GitHub.
Ứng dụng của tôi nhắc người dùng nhập mật khẩu để truy cập vào các mục trong Keychain trên macOS. Làm cách nào để tôi chữa lỗi này?
Nâng cấp phần phụ thuộc Firebase lên phiên bản 9.6.0 trở lên và thêm
[khả năng Chia sẻ khoá](/docs/ios/troubleshooting-faq#macos-keychain-sharing)
vào mục tiêu của bạn.
Tại sao Firebase yêu cầu tính năng Chia sẻ khoá trên macOS?
SDK Firebase sử dụng chuỗi khoá để lưu trữ thông tin như mã cài đặt Firebase dùng cho FCM. Nếu không có quyền truy cập vào Kho khoá, SDK Firebase có thể không hoạt động đúng cách. Kho khoá macOS hoạt động khác với kho khoá kiểu iOS được dùng trên các nền tảng khác (iOS, tvOS, macCatalyst và watchOS).
Trên macOS, các ứng dụng sử dụng một chuỗi khoá dùng chung mà các ứng dụng và quy trình khác có thể sửa đổi. Không giống như iOS, không có chuỗi khoá trong hộp cát nào mà ứng dụng có quyền truy cập ngầm. Vì vậy, khi một ứng dụng Mac tương tác với chuỗi khoá, hệ thống sẽ nhắc người dùng cấp quyền truy cập vì ứng dụng Mac có thể đang sửa đổi một mục trong chuỗi khoá mà ứng dụng đó không tạo. Để giải quyết sự khác biệt này, Firebase truy vấn chuỗi khoá bằng khoá kSecUseDataProtectionKeychain
. Khoá này sẽ yêu cầu ứng dụng truy vấn một mục chuỗi khoá thuộc một nhóm quyền truy cập chuỗi khoá (đây là hành vi mặc định trên các nền tảng khác). Bạn cần có tính năng Chia sẻ chuỗi khoá vì ứng dụng cần tính năng này để tổng hợp một nhóm quyền truy cập có thể được chia sẻ giữa các mục tiêu của ứng dụng, từ đó cấp quyền cho ứng dụng tự do truy cập vào các mục trong chuỗi khoá trong nhóm quyền truy cập.
Để biết thêm thông tin, hãy xem
tài liệu về Kho khoá
của Apple.
Trong Xcode phiên bản 13 trở lên, tại sao ứng dụng UIKit của tôi không thể mở một số
URL mà tôi đã đăng ký
trong Info.plist?
Apple đã giới thiệu giới hạn 50 mục nhập LSApplicationQueriesSchemes
trong tệp Info.plist
. Năm 2015, Apple đã ra mắt LSApplicationQueriesSchemes
để giới hạn số lượng truy vấn URL mà mỗi ứng dụng có thể thực hiện. Với bản phát hành Xcode 13, các giới hạn này được thực thi, trong khi Xcode 12 trở về trước không có giới hạn hiệu quả đối với số lượng giao thức.
Một số sản phẩm Firebase, chẳng hạn như Firebase Authentication và Firebase Dynamic Links, yêu cầu sử dụng giao thức URL tuỳ chỉnh để chuyển hướng đến ứng dụng của bạn. Các URL này tuân thủ một lược đồ URL ngắn gọn và nhất quán, không đáng kể so với giới hạn 50 lược đồ đường liên kết.
Xin lưu ý rằng đối với các ứng dụng tiếp tục đăng ký hơn 50 LSApplicationQueriesSchemes
, một số giao thức sẽ bị bỏ qua. Ứng dụng có thể không thực thi được một số đường liên kết sâu, tuỳ thuộc vào thứ tự thêm các đường liên kết đó.