iOS関連のことを調べてみた

iOS関連のことを調べてみた
目次

チームワークと効率向上のカギ!メルカリが成功する大人数iOS開発のための手法とは?

こんにちは。メルカリ iOSエンジニアの[@sae](https://www.linkedin.com/in/saenuruki/)です。この記事は、[Mercari Advent Calendar 2023 の11日目の記事](https://engineering.mercari.com/blog/entry/20231211-large-team-development-at-mercari-ios/)です。

メルカリのiOSエンジニアが駆使する、驚くべき開発手法をご紹介します。大規模なチームで円滑な開発を実現するために導入されたマイクロモジュール化やトランクベース開発、コードオーナーシステムなど、その手法はまさにスケールのでかい開発環境に適したものばかり。さらに、自動化されたテストや確認のツールにより、効率的で品質の高い開発が可能となっています。

詳細な手法やその効果に興味を持った方は、[メルカリ Advent Calendar 2023 の11日目の記事](https://engineering.mercari.com/blog/entry/20231211-large-

元記事を表示

【iOS】ライトニングトークイベントでAI関連の発表をした振り返り

この記事は[レコチョク Advent Calendar 2023](https://qiita.com/advent-calendar/2023/recochoku)の14日目の記事となります。

## はじめに

こんにちは。株式会社レコチョクの長島です。
2022年4月に新卒で入社し、iOSアプリの開発をしています。最近はソーシャルゲーム『ブルーアーカイブ』のサントラ『[Blue Archive Original Soundtrack Vol.4 ~Aiming for the ideal freedom~](https://recochoku.jp/album/A2003634996/album)』をよく聞いています。
[Unwelcome School](https://recochoku.jp/song/S1019267055/single?ds=1028432592)はミームの曲として有名ですが、元々すごく良い曲なのでオススメです。仕事が大変なときによく聞いています。

今年はiOSアプリの開発に携わると同時に、AIに関する勉強会などにも多く参加していました。レコチョクでは

元記事を表示

PagerDutyのiOSアプリをインストールすると電話通知が来なくなった話

## PagerDutyの活用
弊社ではシステムを監視しているツールをPagerDutyと連携させ、緊急度の高いアラート発生時のオンコールを実現しています(全てがそうなっているわけではありません)。

## 突然、電話通知が来なくなった
PagerDutyにはiOS/Androidアプリがあります。
このiOSアプリ(v7.48.1)を携帯端末iPhoneにインストールし、アカウント連携を行なったところ電話通知が来ないという事象が起きました。

https://support.pagerduty.com/lang-ja/docs/mobile-app

SlackにもPagerDutyからの通知が来るようにしているので、Slackを開いていたおかげですぐにアラートの発生に気づくことができました。ちなみにアプリからの通知は来ていました。

## なぜ?
PagerDutyからMy Profile > Notification Rulesを開き「When a high-urgency incident is assigned to me…」を見ます。

以下のキャプチャではすべての通知

元記事を表示

WKWebViewとネイティブのViewを同じスクロール領域でいい感じに表示したい

## はじめに

当方、Swift/SwiftUIは初心者ですが、勉強がてら個人開発を進めて先日Qiitaのクライアントアプリ「[QiitaReader](https://apps.apple.com/jp/app/qiitareader/id6470926641)」をAppStoreでリリースしました🎉

よければ覗いてみてください(現在`iOS16.4`以降対応)

https://apps.apple.com/jp/app/qiitareader/id6470926641

このアプリを構築する中で少し手こずった、「WebViewと通常のViewを同じスクロール領域でいい感じに表示する」という点を備忘録的に解説しようと思います。

## 実現したこと

記事閲覧画面を [Qiita API v2](https://qiita.com/api/v2/docs#%E6%8A%95%E7%A8%BF) の`GET /api/v2/items/:item_id`のレスポンス`rendered_body`(マークダウンをHTMLとしてレンダーした結果)を使用し、自前のCSSと組み合わせてW

元記事を表示

SwiftのObservationフレームワークによる値の監視

# Observationフレームワークとは

Observationフレームワークは、Swiftで値の変更を監視するためのフレームワークです。

モデル層とビュー層のあいだのデータバインディングの実現に利用でき、とくにSwiftUIでの利用が想定されています。

このフレームワークはSwift 5.9で追加されました。iOS 17、macOS 14など現時点での最新OSでのみ動作するため、それより前のOSをサポートする必要があるアプリの開発には利用できません。そのためすぐには利用できない場合が多いでしょうが、将来のデファクトスタンダードになる可能性があるため、今のうちに知っておくと良いでしょう。

# Swiftにおける値の変更の監視

これまでにも、Swiftで値の変更を監視する方法がありました。

* KVO(Key-Value Observing)
* Objective-Cからの機能
* ObservableObject
* Combineフレームワークの機能
* @Observable
* Observationフレームワークの機能

KVOはSwi

元記事を表示

【SwiftUI】ShapeStyleのopacityの濃さがOSバージョンによって変わる

# はじめに
SwiftUIはOSバージョンによって動きが変わることがよくあります笑

最近はなかなかなく、安定してきたかなと思っていたら遭遇しました。

ちなみに、原因は全くわかりません。
記事を見て何かわかった方はコメントください。

# 何が起こるのか
以下は同じコードで実行したものです。
明らかに透明度が異なります。

![スクリーンショット 2023-12-13 20.20.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/33eb8ec5-d9b1-8818-4a69-9f8d271f65be.png)

左から`iOS15.5`、`iOS16.0`、`iOS17.0`です。

# 発生条件
– `foregroundStyle`で`AnyShapeStyle`を使用する
– `AnyShapeStyle`に対して`opacity`で透明度を変更する

# コード
“`swift
import SwiftUI

struct ContentView: View {

元記事を表示

[備忘] iOSプッシュ通知用の.p12証明書を作る

# はじめに

iOSアプリのプッシュ通知を利用するのにp12証明書を使っているのですが、毎年更新しなきゃないくせに毎回手順を忘れてググっているので、備忘も兼ねてまとめ。

# 手順

## CSR(Certificate Signing Request; 証明書署名要求)の作成

### 1. Keychain Accessを起動
Launchpadから検索します。
image.png

### 2. 認証局に証明書を要求
上部のメニューバーから “認証局に証明書を要求” をクリックします。
image.png[WIP]SwiftUIでTabBarのUIをカスタムする

#
# コード全文
“`swift
import SwiftUI

struct ContentView: View {
@State var selectedIndex = 0

var body: some View {
ZStack(alignment: .bottom) {
TabView(selection: $selectedIndex) {
HomeView()
.tag(TabbarItem.home.rawValue)
FavoriteView()
.tag(TabbarItem.favorite.rawValue)
NewsView()
.tag(TabbarItem.news.rawValue)
ProfileView()

元記事を表示

電話リレーサービスのおしいところを改善した話

# 自己紹介
はじめて、デフエンジニアの会のけんたんです。初めてQiitaの記事を書きます。

# はじめに

聴覚障害者にとって電話は難しいもので、手話通訳者を通して相手に連絡するサービスが電話リレーサービスです。2021年7月に正式にサービス開始して2年たった今、小学校からの緊急電話を5回も受け取ったし、旅行中おすすめのお店を聞いたとき、その場で予約の電話をかけたりと、聴覚障害者が社会に入りやすくなりました。
しかし、デフエンジニアの私からしてユーザービリティが良くなく、使うたびにストレスになっていました。毎年アンケートでこうすれば使いやすくなるよと意見を書いているのですが、未だに改善できていないです。ならば非公式ながら私の方で改善しちゃおうとiPhoneのショートカットというアプリでやるという話です。

## 電話リレーサービスで気になったところ
公的サービスにも関わらず認知度が低く、このサービス知らない健聴者が電話を受けたときいたずら電話、迷惑電話と勘違いして切られてしまう、サービスを信用できないので受け付けないというようなこともあります。今回は技術的なことをあげたいので取り

元記事を表示

SwiftUIでtodoアプリをつくってみた

## はじめに

[アイスタイル Advent Calendar 2023](https://qiita.com/advent-calendar/2023/istyle)の13日目を担当させて頂きます、こたちゃんです:heart_eyes:
私は、iOSのアプリチームで新卒のエンジニア2年目になります👩‍💻
今回はSwiftUI[^1]でTODOアプリを作ってみました😌

[^1]: SwiftUIとは、iPhoneだけでなくiPadやMacOSX、Apple Watchなど、Apple製品のプラットフォームすべてに対応しているUIフレームワークです。

## 作成するアプリ

ファイル名

## 仕様・要件

– ToDoリスト画面
– 入力できるTextFieldがある
– 「追加」というボタンがある

元記事を表示

SwiftFormatとGitフックを用いてコード整形を行ってみる

# Adovent Calendarのご挨拶
Life is Tech Advent Calendar Day13 の記事です!
メンターのはるちろです!よろしくお願いします。

いつもはMinecraftのコースを主にやっていますが、今回は自分の趣味で触っているiosについての記事を紹介をしていきたいと思います。

# 初めに
みなさん、Swiftでプログラミングはされていますでしょうか?
Swiftは便利でiosから、macの開発、ましては、最近話題となったVRゴーグルVisionProにも使われています。
そんな`なうい`言語であるSwiftなのですが、複数人で開発した時にちょっとした改行のブレだったり、if文の表記の揺れなどが起きてしまいます。ですので、この記事を用いて複数人での開発に表記揺れを抑えてみてはいかがでしょうか?
また、今回はSwiftFormatをGitでCommitをした時、走らせるようにしました。その理由としては、XCodeでビルドを走らせないでコミットをしてプルリクを投げられた時に何も気づかずにマージされてしまい、コードを書いていない別の人がSwiftFor

元記事を表示

【SwiftUI】「読み込み中…」の「…」のみアニメーションさせる

こんにちは。[ymurao2](https://twitter.com/ymurao2)です!
「読み込み中…」のような文字列で、末尾の「…」のみアニメーションさせたいときがあると思います。
今回はこちらをご紹介します。

![Simulator Screen Recording – iPhone 15 Pro – 2023-12-12 at 20.50.33.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529173/817b85a9-f5c7-1eb1-92c1-fe21dd35af6e.gif)

# 全体像
コードだけ見たい方、お忙しい方のためにまずは全体像です。
“`swift
struct AnimatedTextView: View {
@State private var dotCount = 0
var dots: String {
String(repeating: “.”, count: dotCount)
}

l

元記事を表示

【SwiftUI】ウィジェットのアニメーションを無効にしたい

# はじめに
iOS16から自動でウィジェットにアニメーションが付与されるようになりました。

![画面収録-2023-12-12-20.45.39.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/55cbe5a1-6f6c-43d4-748b-7e62baa43c71.gif)

これは便利なこともありますが、用途によってはアニメーションを無くしたい時もあります。
ちょうど無くしたい場面に遭遇したので、やり方を記事にしておきます。

# サンプルの実装
“`swift
struct DemoWidgetEntryView : View {
var entry: Provider.Entry

var body: some View {
Text(entry.date.formatted(.dateTime.hour(.twoDigits(amPM: .omitted)).minute().second()))
}
}
“`

# 実装
“`s

元記事を表示

[Swift]TableViewスクロール時のパフォーマンスを高めて滑らかなUIを実現する

# 投稿の経緯
TableViewスクロール時にセルの高さが低くなったり、高くなったりする不具合に遭遇しました。
AutoLayoutの制約は問題なさそうで、heightForRowAtでも固定値を返していたので改めて調査しました。

調査の中で、TableViewへの理解が高まり、スクロール時のパフォーマンスを高めて滑らかなUIを実現する方法に辿り着いたので記事にします。

# 対処法
結論、`tableView(_:estimatedHeightForRowAt:)`を実装して、推定値を返すと改善できました。

“`.swift
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 100 // 推定値を設定する
}
“`

`heightForRowAt`と`estimatedHeightForRowAt`を組み合わせて使用することで、TableViewのパフォーマンスを高めて滑らかなUIを実現することができ

元記事を表示

Package.swiftを楽に書きたい

# はじめに

この記事は[and factory.inc Advent Calendar 2023](https://qiita.com/advent-calendar/2023/andfactory) 12日目の記事です。

昨日は [@doihei](https://qiita.com/nsym__m) さんの「[iOSアプリ開発でDanger+SwiftLintをサクッと導入する](https://qiita.com/nsym__m/items/fa24d9eed123dc8f1a95)」でした。

Swift Packageを用いたマルチモジュール構成で開発を進める際に、Package.swiftの記述が手間だと感じたことはありませんか?

Package.swiftを少し編集するたびにXCodeがResolveを開始したり、typoがあるとエラーになるので地味に辛いです。
少しでも楽に書けるように自分なりに試してみた基本方針を実例とともに紹介できればと思います。

# Package.swift

今回は、1画面=1Targetとして全画面の実装を1つのPresentat

元記事を表示

どうして私がiOSエンジニアに。24卒文系凡骨大学生がメガベンチャーエンジニアになれた訳

私は就職活動を兼ねてからの希望である、第一希望のメガベンチャーのiOSエンジニアとして内定をいただき、就職活動を終えました。この就職活動の経験を元に、意識していたことや気づきなどをここに書きます。
私のように文系でもエンジニアとして働きたいという方や、文系理系に限らず将来はエンジニアとして働きたい方に向けて背中を押すことができればいいなと思っています。

# 筆者について
– 中堅大学の文系大学4年生(経済系)
– プログラミングサークルに所属していた。ここではHTML,CSS,Pythonについてざっくり学ぶ。活動内ではiOS開発には未着手(約2年間在籍)
– YouTubeやUdemy、ネットの記事などを参考にiOS開発をしてみる(約1年間)
– 2023年の3月に個人で開発したアプリをリリースし、これをポートフォリオとして就職活動を進める

# そもそもiOSエンジニアになりたいと思った理由
私がiOSエンジニアになりたいと思った理由は、単純にApple製品がカッコよくて大好きだからです。
最初にiOSに触れたのは、中学一年生に購入したiPod touchの5世代。アプリケーショ

元記事を表示

iOSアプリのアーキテクチャについて理解する

# なぜ、アーキテクチャに拘る必要があるのか

アーキテクチャとは、アプリを綺麗に開発・継続的に運用していくための設計。
このアーキテクチャに沿わない形で開発すると以下のような障害が発生してくることになる。

– ファイルの肥大化
– 1000行越えのViewControllerファイルができてしまったり、コードを追うことが困難に
– ロジックの煩雑化
– 新規機能を付け足していくうちに、状態管理がめちゃくちゃに
→機能の追加、改修が困難に。
– テストがしにくい
– 属人化が進み、プロジェクトの引き継ぎがし難い

etc…

# 設計一覧
### MVC
![スクリーンショット 2023-12-09 23.31.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778525/53bc1bb2-56ea-15d7-4f90-83b62cae46b6.png)

#### 処理流れ
1. `View`がユーザーの入力情報を受け付け、`Controller`にアクシ

元記事を表示

Flutter 環境別Crashlyticsの実装方法 Android/iOS

## この記事ではFLuttterの環境別Crashlyticsの設定方法を紹介します。

## 目次
“`
1. 環境別Firebaseプロジェクトの作成
2. main.dartの実装
3. iOSの設定
4. Androidの設定
“`
上記の順で紹介したいと思います。
まずCrashlyticsを使用するために[Firebase](https://firebase.google.com/?hl=ja)プロジェクトを作成します。URLをタップすると以下の画像のように「使ってみる」が表示されるのでタップ(ログイン、アカウントの作成を行なっていない方は作成して下さい。)

![スクリーンショット [0005-12-07](tel:0005-12-07) 11.36.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/65a692a8-30df-76c8-6a7c-51ca21871784.png)

すると、以下の画像のような画面に遷移すると思うので、プロジェクトを追加→プロジ

元記事を表示

【SwiftUI】Widgetで表示しているViewか判定する

# はじめに
メインアプリとウィジェットアプリで共通のViewを使用している時に、メインアプリで表示しているのかウィジェットで表示しているのかをView側で知りたいといった場面がありました。

公式からそのような機能は提供されてなく、どうにか実現できないかと考えた結果今回の方法に辿り着いたので記事にしておきます。

# 実装
“`swift
import SwiftUI

struct IsWidgetEnvironmentKey: EnvironmentKey {
static var defaultValue: Bool {
Bundle.main.bundlePath.hasSuffix(“appex”)
}
}

extension EnvironmentValues {
var isWidget: Bool {
get { self[IsWidgetEnvironmentKey.self] }
set { self[IsWidgetEnvironmentKey.self] = newValue }

元記事を表示

【SwiftUI】力技でTo Be Continued作った

この記事は[DeNA 24 新卒 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/dena-24-newgrad)の11日目の記事です。

# はじめに
画像など使わず完全にSwiftUIのみでTo Be Continuedを再現します。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-11 at 18.55.40.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a56b0cfd-b9b6-9f8b-b5c2-fb81994db2d5.gif)

# 使用するフォント
それっぽいGoogleFontにあったのでそちらを使用します

https://fonts.goo

元記事を表示

OTHERカテゴリの最新記事