iOS application for CA Tech Challenge ONLINE ACE created by @KS1019 and @techiro

Overview

インターン後改善したところ

  • RepositoryのMock化を行って、ViewModelのテストを可能にした
  • RepositoryやViewModelをコンストラクタインジェクションを使ってDI
  • Repository自体のテストを実装できるように、URLSessionのAdapterを定義してスケジューラーを実行時に変更できるように変更   - KeychainのAdapterは実装できていません。
  • API通信で帰ってくるErrorCodeによって適切に処理を分岐させること(とりあえず、CalendarViewのpost部分のみ実装しています。)

依存ライブラリ&ツール等

ライブラリ

OHHTTPStubs

  • バックエンドのAPIができるまで、HTTP通信の確認ができない問題があった。そのため、今回はHTTPスタブをクライアント内で設定することができるライブラリとしてOHHTTPStubsを選択しました。
  • このライブラリを用いることで、非同期でRepositoryのテストを事前に行いました。
  • テストでは正常系と異常系を用意し、実際のリクエストを行った時にどういった振る舞いをするかについて確認することができました。
選定理由

このライブラリはObjective-Cの時代からある老舗のHTTPスタブライブラリであり、現在も開発が進められています。 また、今回のテストではスタブを用意するために使用したため、多くのことができる他のテストライブラリと比べてより使い方がシンプルでアプリ自体のパフォーマンスに影響を与えないライブラリだと判断したためこのライブラリを選定しました。

ツール

Xcodegen

  • .xcodeprojファイルのコンフリクトを防ぐため。利用停止する場合は生成された.xcodeprojファイルをそのままpushすることで簡単に移行できるので選択した。

Swiftlint

  • 構文を統一することで読みやすさと、エラーの早期発見を行うことができるため導入しました。また、プルリクエスト時に自動チェックを行うために、Github Actionsにも導入しました。

チャレンジポイント

  • SwiftUIをUIフレームワークとして選択した点。UIKitと比較した時、成熟しきっていない部分もあるが、MVCアーキテクチャに囚われず他のアーキテクチャの選定を行いやすいなど、SwiftUIの方が将来性がありどうしても厳しい部分はUIKitを組み合わせて補えるという判断でSwiftUIを選択した。

Xcodegenのインストール

Homebrewの場合

brew install xcodegen

その他のインストール方法は https://github.com/yonaskolb/XcodeGen を参照してください。

.xcodeprojの生成

このプロジェクトをクローンした後、以下のコマンドで生成してください。

cd 2108-ace-c-ios
xcodegen generate

開発時のルール

開発方法

  1. main ブランチから開発用のブランチを切る。(ブランチ名については下のブランチ命名規則を参照)
  2. 開発用のブランチで開発を進める。(このブランチからさらにブランチを切ってマージをさせる分には自由にやってもらって大丈夫です。コミットのルールについては下記を参照)
  3. main -> 開発用ブランチにマージをし、コンフリクトが発生していないか確認する。(大きな破壊的変更を加えた時のみ)
  4. 開発用のブランチ -> main にプルリクを出す。
  5. レビュアーが承認した後、レビュアーが実際にマージを行う。(レビューして欲しい時はReviewersに追加)
  6. レビュアーがマージの後、PRブランチを削除する

テストに関して

  • テスト関数は日本語で命名する

ブランチ命名規則

  • 新規ページ design/[ページ名]
  • 新規機能 feat/[機能名]
  • 既存機能の修正 fix/[機能名]
  • バグ修正 hotfix/[バグ名]
  • リリース release/[バージョン]

コミットのルール

  • コメントの言語(日・英)に関してはとくに定めていません。
  • 頭に、タグ(add:, update:, fix: など)をつけてもらえると非常に見やすいかと思います。
  • コミットの粒度については、なるべく細かめにお願いします。(目安としては、1機能1コミット)
  • ドキュメントは直接mainにコミットしてもOKです。
You might also like...
The simplest way to display the librarie's licences used in your application.
The simplest way to display the librarie's licences used in your application.

Features • Usage • Translation • Customisation • Installation • License Display a screen with all licences used in your application can be painful to

An application where users can simulate trading stocks with a starting balance of fake money.
An application where users can simulate trading stocks with a starting balance of fake money.

Eighth Wonder Finance Table of Contents Overview Product Spec Video Walkthrough Wireframes Schema Overview Description An application where users can

Ecolande - Application realisé pendant l'Apple foundation Program.

Ecolande Application realisé pendant l'Apple foundation Program. Ecoland est l'application qui a été réalisé pendant l'Apple Foundation Program. Nous

Profiler Application using Sentiment Analysis

Profiler Application using Sentiment Analysis Abstract We send many posts and pictures over the time on our social channels such as Facebook, Instagra

An application focused on managing men's haircuts. It has never been so easy to keep the cut on time
An application focused on managing men's haircuts. It has never been so easy to keep the cut on time

An application focused on managing men's haircuts. It has never been so easy to keep the cut on time

C4 is an open-source creative coding framework that harnesses the power of native iOS programming with a simplified API that gets you working with media right away. Build artworks, design interfaces and explore new possibilities working with media and interaction.
Validate iOS, Android, and Mac localizations. Find errors in .strings, .stringsdict, and strings.xml files.

Locheck An Xcode and Android localization file validator. Make sure your .strings, .stringsdict, and strings.xml files do not have any errors! What do

Easy CBOR encoding and decoding for iOS, macOS, tvOS and watchOS.

CBORCoding CBORCoding is a lightweight framework containing a coder pair for encoding and decoding Codable conforming types to and from CBOR document

TypeStyle is a handy app for iPhone and iPad that generates text using different styles and decorations. It is a native Swift iOS app.
TypeStyle is a handy app for iPhone and iPad that generates text using different styles and decorations. It is a native Swift iOS app.

TypeStyle TypeStyle is a handy app for iPhone and iPad that generates text using different styles and decorations. It is a native Swift iOS app. Featu

Owner
Kotaro Suto
Kotaro Suto
Pavel Surový 0 Jan 1, 2022
Challenge... counting game for kids... should be entertaining, educational and fun... o_O

MultiTainment Simple multiplication game for kids. Possible to choose how many questions they want to answer and how hard shoud it be. Simple funny in

Pavel Surový 0 Dec 4, 2021
WWDC21 Swift Student Challenge Submission

CircuitPlay Introduction Hello, welcome to Jose Adolfo Talactac's submission for WWDC21 Swift Student Challenge, CircuitPlay! CircuitPlay is an inter

Jose Adolfo Talactac 26 Dec 1, 2022
HumanScan for WWDC 21 Swift Student Challenge

WWDC 2021 Student Challenge ?? HumanScan: an interactive playground for scanning, rigging, and applying animations to real-life 3D human models YouTub

JustZht 55 Dec 29, 2022
My Bootcamp ; 100 days challenge swift with swiftui

References : https://gelecegiyazanlar.turkcell.com.tr/konu/swift (free) https://gelecegiyazanlar.turkcell.com.tr/konu/swift-ile-ios-programlama (free)

burak cakir 3 Jun 5, 2022
This library project contains a few noise generators created in Swift.

SwiftNoiseGenerator This library project contains a few noise generators created in Swift. contains: Perlin Noise Simplex Noise How to use Edit your P

Ichiro HIROTA 1 Jan 20, 2022
Created a Tic Tac Toe game with pure swift that runs within zsh shell.

Swift TicTacToe Created a Tic Tac Toe game with pure swift that runs within zsh shell. The computer is actually really hard to beat and it ends up bei

Ethan 0 Nov 25, 2021
A macOS application displaying the thermal, voltage and current sensor values.

Sensors About A macOS application displaying the thermal, voltage and current sensor values. License Project is released under the terms of the MIT Li

Jean-David Gadina 82 Jan 3, 2023
A visual developer tool for inspecting your iOS application data structures.

Tree Dump Debugger A visual developer tool for inspecting your iOS application data structures. Features Inspect any data structure with only one line

null 8 Nov 2, 2022
LifetimeTracker can surface retain cycle / memory issues right as you develop your application

LifetimeTracker Bar style Circular style LifetimeTracker can surface retain cycle / memory issues right as you develop your application, and it will s

Krzysztof Zabłocki 2.8k Jan 4, 2023