Section 4/71 menit
4. Kapan Harus Digunakan
4. Kapan Harus Digunakan
Gunakan package ketika:
1. Cross-module helpers dalam satu SDK/library
swift
// Core module: helper yang dibutuhkan Analytics tapi bukan end-user API
package extension URLRequest {
package func addAuthHeaders(_ token: String) -> URLRequest {
var request = self
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
return request
}
}
// Analytics module: pakai helper ini
import Core
let authenticated = request.addAuthHeaders(token) // ✅ OK
2. Shared types antar feature modules
swift
// SharedTypes module (dalam paket yang sama)
package struct AnalyticsEvent {
package let name: String
package let properties: [String: String]
package let timestamp: Date
package init(name: String, properties: [String: String] = [:]) {
self.name = name
self.properties = properties
self.timestamp = Date()
}
}
// UserFeature module
import SharedTypes
let event = AnalyticsEvent(name: "user_login") // ✅ OK
// Consumer App: tidak bisa akses AnalyticsEvent langsung
// AnalyticsEvent adalah implementation detail dari SDK
3. Testing yang butuh akses ke internal implementation
swift
// Core module: implementation detail
package class RequestBuilder {
package var baseURL: URL
package var headers: [String: String] = [:]
package init(baseURL: URL) { self.baseURL = baseURL }
package func build() -> URLRequest { URLRequest(url: baseURL) }
}
// CoreTests target (dalam paket yang sama):
import Core
// Bisa test RequestBuilder secara detail tanpa menjadikannya public
let builder = RequestBuilder(baseURL: testURL)
builder.headers["X-Test"] = "true"
let request = builder.build()
4. Plugin/extension point antar module
swift
// PluginCore module
package protocol FeaturePlugin {
package var identifier: String { get }
package func activate(with context: PluginContext)
}
package class PluginRegistry {
package static let shared = PluginRegistry()
package func register(_ plugin: any FeaturePlugin) { }
}
// FeatureA module
import PluginCore
struct FeatureAPlugin: FeaturePlugin {
package var identifier = "com.app.featureA"
package func activate(with context: PluginContext) { }
}
// Registration — tanpa end-user bisa melakukan hal yang sama
PluginRegistry.shared.register(FeatureAPlugin())