🛠️

Valuable iOS development resources

Updated
Sep 18, 2021 2:21 AM
Created
Sep 11, 2020 4:15 AM
Tags
UIKitSwiftSwiftUIObjective-CCocoaiOS
Keywords
Date

Swift Language

  • withExtendedLifetime
  • optimize object lifetime by compiler

Swift Type Metadata (ja) - kateinoigakukunのブログ

try! Swift 2019 kateinoigakukunです。メルカリで インターン をしています。 今日はSwiftを理解するために重要な メタデータ について話します。Swiftは静的型付けな言語として知られていますが、 実はランタイムにおいては動的な部分が多々あるのです。 皆さんもStackOverflowを見て、一度はこんなコードを書いて型名を取得したことがあるでしょう。 例えば UITableViewCellをregisterするとき、Xibのファイル名をクラス名と合わせるために使っていると思います。よくあるextensionですね。一方で、この一行がランタイムでどのように動いているか考えたことはありますか?これを機にSwiftのランタイムのメモリ表現を考えてみませんか? メタデータ の世界に飛び込んでみましょう! What is type metadata?

Swift Type Metadata (ja) - kateinoigakukunのブログ

Nominal Types - Tuple

dynamic casting

Build Time

Concurrency programming

Async Await - Strucutured Concurrency

Swift Concurrency まとめ

Swift 5.5 では、待望の async/await 構文をはじめとした Swift Concurrency Roadmap における並行処理機能、いわゆる Swift Concurrency のサポートが多く開始され、先日の WWDC21 でも各機能の使いかたや仕組みが詳細に解説されていました。 Swift Concurrency についてはすでに koher 氏の 『Swift 6 で来たる並行処理の大型アップデート近況』や 『先取り! Swift 6 の async/await』 などの資料でも詳細に解説されています。この記事では WWDC の各セッションで行われた説明の紹介を中心に、この記事ひとつで Swift Concurrency についての現時点での概観を把握できる状態を目指して、改めてまとめてみました。 以下の情報は Xcode 13 の最初のベータ版が利用可能になった時点でのものです。Xcode 13 が正式にリリースされる時点では、仕様やインターフェースが変更されている可能性があります。 Concurrency にまつわる様々なプロポーザルの関係性を表した図。 Swift Forums より Swift 5.5 で追加される非同期処理関連の機能として、言語の構文としての async/await と、各並行処理間の関係性を整理するための概念である Structured

Swift Concurrency まとめ

Swift evolution proposals

Creating high-performance User Interface

Hitches

Graphics

  • How do I get a better performance in using fancy UI?
  • Why is it slow using cornerRadius?

Instruments’ Core Animation Tool has an option called Color Offscreen-Rendered Yellow that will color regions yellow that have been rendered with an offscreen buffer (this option is also available in the Simulator’s Debug menu). Be sure to also check Color Hits Green and Misses Red. Green is for whenever an offscreen buffer is reused, while red is for when it had to be re-created.

How to get high-performance corner rounding UI

Camera (Handling CVPixelBuffer)

Drawing CVPixelBuffer with Metal

CALayer backing store

Swift Performance

Swift Optimization tips from Swift group

iOS Mechanics

EventLoop

💡

event-loop or run-loop is a important keyword in iOS app development. It handles all of events (touch, gesture, tap) and scheduling operations and displays.

Xcode Building

Sizing application binary size

☝

Enabling bitcode helps to reduce the size of application binary

Reducing Your App’s Size

Doing Basic Optimization to Reduce Your App’s Size

Doing Advanced Optimization to Further Reduce Your App’s Size

Organizing modular packages

Xcode code writing

User Interface

Layout

Debugging In Layout

Animation in UI

UIKit

ScrollView

ChildViewController (creating container view controller)

Creating a Custom Container View Controller

Create a composite interface by combining content from one or more view controllers with other custom views.

Articles from the top players

CALayer

SwiftUI

Debugging

Git

パーシャルクローンとシャロークローンを活用しよう - GitHubブログ

Git のリポジトリが大きくなると、新しい開発者がクローンして作業を始めるのが難しくなります。Git は 分散 バージョン管理システムとして設計されています。つまり、リポジトリとのやりとりを管理する中央サーバーに接続しなくても、自分のマシンで作業ができるということです。これが完全に実現できるのは、すべての到達可能なデータがローカルリポジトリにある場合だけです。 もっと良い方法があったらどうでしょうか?Git の全履歴にあるすべてのファイルのすべてのバージョンをダウンロードしなくても、リポジトリで作業を始めることができたらどうでしょうか?Git の パーシャルクローンや シャロークローン という機能は、こういったケースで役立ちます。その一方でこれらの機能にはトレードオフもあります。これらの選択肢は Git の分散という性質によってもたらされる可能性を少なくとも一つは壊してしまうため、こうしたトレードオフは受け入れられないと思うかもしれません。 もしあなたが非常に大規模なモノレポを扱うのであれば、これらのトレードオフは価値がある可能性が高いですし、時にはその規模の Git リポジトリでは 必須 であると言えます! このトピックを掘り下げていく前に、Git がどのようにデータを保存しているのか、 コミットやツリー、ブロブオブジェクトをよく理解しておきましょう。GitHub Universe での私のセッション Optimize your monorepo experience では、これらのアイデアやその他の役立つヒントを紹介しました。 GitHub でホストされているリポジトリのクローンサイズを小さくするには、三つの方法があります。 git clone --filter=blob:none は ブロブレスクローン を作成します。このクローンは、到達可能なすべてのコミットとツリーをダウンロードする一方、ブロブは必要に応じて取得します。このクローンは、開発者や複数回ビルドを実行するようなビルド環境に最適です。 git clone --filter=tree:0 は ツリーレスクローン を作成します。このクローンは、到達可能なすべてのコミットをダウンロードする一方、ツリーとブロブは必要に応じて取得します。このクローンは、一度ビルドを実行した後に削除される予定で、コミット履歴にはアクセスしたいというビルド環境に最適です。 git clone --depth=1 は シャロークローン を作成します。このクローンはコミット履歴を切り捨ててクローンのサイズを小さくします。これによって、想定外の問題を引き起こしたり、利用可能な Git コマンドが制限されます。また、このクローンは後からのフェッチに過度のストレスを与えることになるので、開発者が使用することは強くお勧めしません。一度ビルドした後にリポジトリを削除するビルド環境では便利です。 これからさまざまなクローンの種類について議論するにあたり、各 Git オブジェクトを以下の記法で表します。 四角はブロブです。ファイルの内容を表します。 三角はツリーです。ディレクトリを表します。 円はコミットです。ある時間におけるスナップショットを表します。 オブジェクト間の関係を表すために矢印を使用します。基本的にある OID B が、あるコミットもしくはツリー A の中に現れた場合、オブジェクト A はオブジェクト B への矢印を持ちます。あるオブジェクト A から別のオブジェクト C へ複数の矢印を辿って到達することができれば、 C は A から 到達可能 と言います。こういった矢印を辿るプロセスは時に オブジェクトを渡り歩く とも言われます。 これで、 git clone コマンドでダウンロードしたデータを記述できるようになりました!クライアントはサーバーに最新のコミットを要求し、サーバーはそれらのオブジェクトとそこから 到達可能なすべてのオブジェクト を提供します。これには、コミット履歴全体のすべてのツリーやブロブが含まれます。 この図では、時間は左から右に向かって経過していきます。コミットからその親への矢印は右から左に向かっています。各コミットは一つのルートツリーを持っています。 ...

パーシャルクローンとシャロークローンを活用しよう - GitHubブログ