.llms/skills/runbooks.md
Step-by-step guides for multi-step workflows. Follow every step in order.
Determine if dual interface is needed. Does the method use Swift-only types
(Result, enums with associated values, structs)? If yes → dual interface
required. If the types are ObjC-compatible (classes, NSObject subclasses,
primitives) → a single @objc method is sufficient.
For dual interface: follow the pattern in .llms/skills/public-api-design.md.
For ObjC-only types: a single @objc method is sufficient. No dual
interface needed.
Update CHANGELOG.md — add an entry under the [next] section describing
the new API.
Define a protocol for the dependency. Use -ing/-Providing/-Creating
suffix (e.g., TokenRefreshing, DataProviding, RequestCreating).
Factory protocols use *FactoryProtocol (e.g., GraphRequestFactoryProtocol).
Add the protocol property to ObjectDependencies or TypeDependencies in
the type's DependentAsObject / DependentAsType extension. Properties must be
in alphabetical order by name.
Wire the concrete implementation:
CoreKitConfigurator
(FBSDKCoreKit/FBSDKCoreKit/Internal/Configuration/CoreKitConfigurator.swift)
using components from CoreKitComponents
(FBSDKCoreKit/FBSDKCoreKit/Internal/Configuration/CoreKitComponents.swift).defaultDependencies in the type itself. See
FBSDKLoginKit/FBSDKLoginKit/LoginManager.swift:72-95 for the pattern.Create a test double named Test<Type> in the module's
<Module>/<Module>Tests/Helpers/ directory.
Update setUp() in the relevant test file to inject the test double via
setDependencies().
Run module tests: ./scripts/test.sh <Kit>
Add the deprecation annotation to the old method or property:
@available(
*,
deprecated,
message: """
This property is deprecated and will be removed in the next major release. \
Use `newName` instead.
"""
)
Make the deprecated API delegate to the replacement — no logic duplication.
Reference: FBSDKCoreKit/FBSDKCoreKit/Settings.swift:65-76
Run module tests: ./scripts/test.sh <Kit>
Update CHANGELOG.md — add a deprecation entry under the [next] section.