-
Notifications
You must be signed in to change notification settings - Fork 35
Get Started
Aaron Brethorst edited this page Feb 21, 2024
·
7 revisions
This page is intended for contributors to the OneBusAway iOS app. For white-label instructions, please refer to White Label.
The iOS codebase is a white-label product, with a well-layered software architecture.
graph TD
subgraph business ["🧰 OBAKitCore.framework"]
end
subgraph userinterface ["🧰 OBAKit.framework"]
end
subgraph whitelabelapps ["📱 White-Labeled App"]
onebusawayapp[OneBusAway.app]
style onebusawayapp fill:green,color:white
kiedybusapp[KiedyBus.app]
style kiedybusapp fill:blue,color:white
end
subgraph extensions ["App Extensions"]
todayview[iOS Today View]
end
extensions --> business
userinterface --> business
whitelabelapps --> userinterface
subgraph thirdparty ["📦 Third-Party Dependencies"]
spm[Swift Package Manager]
style spm fill:orange
end
In general:
-
OBAKit
is responsible for the user-interface and other iOS-specific logic. -
OBAKitCore
is responsible for networking, data models and storage, location services, and region management.
Code in OBAKitCore
and OBAKit
should be written in a generic sense (i.e. agency-agnostic). For more information, please refer to White Label.
- Xcode
- Download from https://developer.apple.com/xcode or the Mac App Store
- XcodeGen
- Download from https://github.com/yonaskolb/XcodeGen or
brew install xcodegen
- Download from https://github.com/yonaskolb/XcodeGen or
- SwiftLint (optional, but required for PRs)
- Download from https://github.com/realm/SwiftLint or
brew install swiftlint
- Download from https://github.com/realm/SwiftLint or
- Ruby (already installed with macOS)
OBAKit uses XcodeGen to create the xcodeproj
project file. From the root of your project, run the following command:
scripts/generate_project OneBusAway
This creates an OBAKit.xcodeproj
in the root project directory. Open it, Xcode will automatically download dependencies using the Swift Package Manager.
Open a GitHub Issue with your question, we will do our best to help :)