所以我有一個主要的iOS應用程序,其中包括我所做的框架。從主應用程序,框架如何獲得自己的包? (Localizable.strings)
在這個框架中,我創建了一個Localizable助手以及一個Date助手。 日期助手有一個功能timeAgo()
,它可以返回「8小時前」。我想本地化這個字符串。所以,我在我的框架是這樣的:
public extension String {
public func localized(in bundle: Bundle) -> String {
if let path = bundle.path(forResource: Localize.currentLanguage(), ofType: "lproj"),
let bundle = Bundle(path: path) {
return bundle.localizedString(forKey: self, value: nil, table: nil)
}
return self
}
}
public extension Date {
public func timeAgo(format: DateUnitFormat = .short) -> String {
let thisFrameworkBundle = Bundle(for: Localize.self) // Class declared in the framework
//Whatever, just display a localized word
return "second".localized(in: thisFrameworkBundle)
}
}
當我運行(框架本身內部的單元測試)本地測試,本地化的工作的事情。該包被找到。
但是,當我從我的主應用程序調用timeAgo
時,它不再工作。
我試圖將let thisFrameworkBundle = Bundle(for: Localize.self)
這行改爲let thisFrameworkBundle = Bundle(identifier: "com.myIdentifier")
,同樣的事情(所以它在框架內工作,但在主應用程序調用時不起作用)。
編輯:
好了,所以我注意到,因爲我使用的CocoaPods Bundle(identifier: "com.myIdentifier")
不會框架內的工作,它覆蓋了cocoapod一個框架標識符。然而,我仍然不明白爲什麼使用Bundle(for: FrameworkClass.self)
將無法從主應用程序工作(但在框架的單元測試工作)
添加評論給我建議的答案是「com.myIdentifier」完全合格嗎?如果是這樣,我很快就會刪除我的答案(和這個評論) - 但請看看我必須使用的用法。這可能是你需要的。 – dfd