This is the repo for the dev.to iOS app.
Released first version, more info: https://twitter.com/bendhalpern/status/1061323718058786822
We will grow to include more native code over time, but for now we are taking the approach of native shell/web views. This approach lost favor early in iOS days, but I believe it is a very valid approach these days. It is inspired by how Basecamp does things. Our tech stack is a bit different, but the ideas are the same.
https://m.signalvnoise.com/basecamp-3-for-ios-hybrid-architecture-afc071589c25
https://signalvnoise.com/posts/3743-hybrid-sweet-spot-native-navigation-web-content
https://signalvnoise.com/posts/3766-hybrid-how-we-took-basecamp-multi-platform-with-a-tiny-team
https://www.youtube.com/watch?v=SWEts0rlezA
By leveraging wkwebviews
as much as possible, I think we can make this all pretty awesome and sync up with our web dev work pretty smoothly. And where it makes sense, we can re-implement certain things fully native, or build entirely native features. Life's a journey, not a destination.
- Fork and clone the project.
- Build and run the project in XCode.
- To enforce code style we're using SwiftLint which is loosely based on GitHub's Swift Style Guide. CodeClimate is enabled for this repository, so your pull request build will fail if there are linting errors!
- To install,
brew install swiftlint
. - If you are using Xcode, add a new "Run Script Phase" (Xcode project > Build Phases > add New Run Script Phase):
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
This will run on build and show linting errors in Xcode. If you are using a different IDE there are alternative install methods in the SwiftLint docs.
3. Alternatively you can run $ swiftlint
in the root directory.
Feedback and Pull Requests are welcome! As this is a new and constantly evolving project, please be sure to include unit tests with changes.