- 1. 【Swift】ファイル操作を簡単にするための extension を作ってみた
- 2. iOSでもバックグラウンドでWeb Audio APIの音が鳴るようにする
- 3. iOS開発者向けの Developer Roadmaps が公開されてた
- 4. SwiftUI boldのModifierが冗長だった件について
- 5. 【Swift】ファイルやディレクトリのパスが長すぎていやだ – URL.shortPath()
- 6. SwiftUIのDatePicker(graphycal)をタップした時にサイズが変わってしまう問題の対処法と備忘録
- 7. 【Swift】fastlaneを使用してリリースまでのステップを自動化する
- 8. Apple Pencil Proのスクイーズに対応する
- 9. ビルドエラー解決方法 ‘DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead’
- 10. xcodeで開発したアプリの.appファイルの作成方法
- 11. お産合宿2024で発表した「マルチモーダル入力とOptical Flowによるリアルタイムスポーツ実況システム SportsVision」の開発レポート
- 12. Xcodeのクソデカ シミュレーターインストールをマシにする
- 13. configuration?.imageが効かない時の解決方法
- 14. iOS / macOSの構造体をUserDefaultsに保存する
- 15. iOSデバイスが実機かシミュレータかを判断する方法
- 16. iOS / macOSアプリでAssets内の音声ファイルを再生する
- 17. プログラミング未経験のメンバーとチームを組み、数年かけて iOS アプリ「Macbeth」をリリースした話
- 18. 個人開発で月1万円を稼げるようになった話。
- 19. LiveActivityを導入してNotificationを利用したインタラクティブ性を持たせる part2
- 20. LiveActivityを導入してNotificationを利用したインタラクティブ性を持たせる part1
【Swift】ファイル操作を簡単にするための extension を作ってみた
【Swift】ファイルやディレクトリ操作するための extension をまずは作った https://t.co/Z2zVpDvLkH
— chanzmao (@maochanz) June 8, 2024
“`swift
FileManager.default.showContents()// /HOME/Documents/
// /HOME/Documents/another/
// /HO
iOSでもバックグラウンドでWeb Audio APIの音が鳴るようにする
## 問題提起
iPhone、iPadなどに搭載されているmobile safariの仕様により、WebAudioAPI経由で出した音はホーム画面に戻った際に中断されます。
もう一度safariを開いた際に音は中断したところから再開されますが、以下のコードを記述すればバックグラウンドでも音が再生され続けます。## 解決策
“`javascript:解決策.js
/* let audioContext; */window.addEventListener(“visibilitychange”, () => {
if (document.visibilityState !== “hidden”) {
return;
}
audioContext.resume();
});
“`
もっといい方法があれば教えてください🙇♂️### 参考文献
https://developer.mozilla.org/ja/docs/Web/API/Document/visibilitychange_eventhttps://kimizuka.hat
iOS開発者向けの Developer Roadmaps が公開されてた
# これ
https://roadmap.sh/ios
# 追加されてる!
![スクリーンショット 2024-06-07 11.20.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281147/e7d7a9d1-2ec0-3dd4-4f02-7ff2eb666d9b.png)
https://roadmap.sh/
今までは同じモバイルアプリでもAndroidだけしかなかったりと、[実は長らく求められていた](https://github.com/kamranahmedse/developer-roadmap/issues/3280)
# デベロッパーロードマップとは?
開発者がその界隈を学ぶ際い体系的にどのスキル・技術を学ぶべきかを表したものです。
OSSでアクティブなもの。# あとがき
– iOSはSwiftUIが出てきたりして何からやればいいのか複雑だったので、他の人にとっても、個人的にもかなりありがたいのかなと思ってます。
– WWDC2024がいよいよ来週から!楽しみ
SwiftUI boldのModifierが冗長だった件について
# **背景**
今まで`Text`に対して、`.font(.system(size: ))`のModifierを付与しているときも`.bold()`のModifierを付与していました。
なんとなくFigmaのPluginsの SwiftUI Inspector使った時に、
`.font(.system(size: 14, weight: .bold))`を提案されました。1行で済むのか…
これは盲点でした。
# **Before**
“`swift
Text(“Hello World”)
.bold()
.font(.system(size: 16))
“`# **After**
“`swift
Text(“Hello World”)
.font(.system(size: 16, weight: .bold))
“`**Figma の SwiftUI Inspector**
【Swift】ファイルやディレクトリのパスが長すぎていやだ – URL.shortPath()長すぎですよね。
![sc 2024-06-07 at 1.17.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/f6804d4a-2f8b-563d-c262-090fc1a651df.png)
“`URL.shortPath()“` を使います。
“`swift
let documents = URL.documentsDirectoryprint(documents.shortPath())
// /HOME/Documents/print(
documents
.appending(component: “Documents and Settings/”)
.shortPath()
)
// /HOME/Documents/Documents%20and%20Settings/print(
documents
.appending(component: “Documents and Settings”, director
SwiftUIのDatePicker(graphycal)をタップした時にサイズが変わってしまう問題の対処法と備忘録
# **背景**
SwiftUIのDatePickerは何かと扱いが難しいと感じています。
例えば、DatePickerStyleのdefaultまたはcompactで表示されるselectionのラベルはカスタマイズができないようです。SwiftUIのDatePickerを扱ったことのある人であれば必ず通るのではないでしょうか?
本記事では、ラベルをカスタマイズする方法とその課題についても触れています。表題の事象にハマった人の一助となれば幸いです。
# **1. graphycalでタップした時にサイズが変わってしまう問題の対処法**
このような事象は許容できなくもないですが、できれば解決したいはずです。
以下のように.frame(width: 320)を追加することで回避できます。
widthを指定しなかったり
【Swift】fastlaneを使用してリリースまでのステップを自動化する
## はじめに
リリース作業で時間を取られたり手間がかかっているという問題を解決すべくリリース作業を自動化してみようと思います。導入から実行まで紹介します。## fastlaneとは
iOSやAndroidアプリのビルド、テスト、リリース作業を自動化するためのツールです。## 導入方法
### 1. fastlaneをインストール
https://docs.fastlane.tools/getting-started/ios/setup/
今回はHomebrewを使用してインストールします。
“`
brew install fastlane
“`### 2.ターミナルで追加対象のプロジェクトのディレクトリに移動し、initを実行します。
“`
cd /xxx_projectfastlane init
“`### 3. 質問にいくつか答えます
![インストール開始.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/66f08aee-8c68-500f-910
Apple Pencil Proのスクイーズに対応する
# はじめに
[Apple Pencil Pro](https://www.apple.com/jp/shop/product/MX2D3ZA/A/apple-pencil-pro)が2024年5月に発売され、ペンの操作に新しいアクション: **スクイーズ** が追加されました。
スクイーズ(squeeze)とは、「強く押す」といった意味などがある単語です。Apple Pencil Pro対応の新しいAPI[^newapi]を使うことで、ペンをギュッと握ったときのアクションを実装することができます。本稿では、スクイーズの実装例を僕が個人開発している手書きノートアプリ[^bluesketch]から一部抜粋して紹介します。
# スクイーズ時のアクション
Apple Pencil Proをスクイーズしたときのアクションは 設定 > Apple Pencil で選択することができます。
![ApplePencilPro_settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73490/59
ビルドエラー解決方法 ‘DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead’
環境
Xcode15.0.2“`
‘DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead’
“`Xcodeのバージョンを上げてアプリをビルドする際に上記ビルドエラーが発生しましたのでメモ。
## 解決方法
ターミナルで対象アプリのディレクトリに移動します。
以下コマンドを実行します。CocoaPodsのバージョンを確認して、Homebrewでアップデートします。
“`
pod –version
brew upgrade cocoapods
pod –version
“`Podsディレクトリを削除して、再度pod installします。
“`
rm -rf Pods
pod install
“`## 参考
https://blog.landhighest.com/article/179
xcodeで開発したアプリの.appファイルの作成方法
**xcodeで開発したアプリの.appファイルの作成方法**
xcodeで開発したアプリの.appファイルの作成方法がわかりづらかったため手順をまとめる。
・目次
1.appファイルの作成
2.ファイルの拡張子の表示
3.zip化**1.appファイルの作成**
xcodeを選択し、画面上部のメニューバーからProduct-Buildを選択し実行。
![スクリーンショット 2024-06-05 22.56.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476538/aa23612e-0fe2-725b-5b96-bd8bc42b0265.png)**2.ファイルの拡張子の表示**
Finderを選択し、画面上部のメニューバーからFinder-設定を開く。
「すべてのファイル拡張子を表示」にチェックをつける。
![スクリーンショット 2024-06-05 22.59.43.png](https://qiita-image-store.s3.ap-north
お産合宿2024で発表した「マルチモーダル入力とOptical Flowによるリアルタイムスポーツ実況システム SportsVision」の開発レポート
2024年5月30日から2日間、GMOペパボ恒例のお産合宿に参加しました。今年のテーマは「動画配信カルチャーにフィットしたアプローチをアウトプットする」でした。私はこのテーマに基づき、スポーツ実況を効率化し、魅力的な動画コンテンツを提供するツール「SportsVision」を開発しました。
![](https://cdn-images-1.medium.com/max/1600/1*eFPrEd0aD8tCvI1bFK6QmQ.png)
### お産合宿 2024とは
GMOペパボのお産合宿は、社員が新しい技術やアイデアを試す場として毎年開催されています。2024年のテーマは「動画配信カルチャーにフィットしたアプローチをアウトプットする」でした。このイベントには、多くの社員が参加し、各チームがテーマに基づいたアウトプットを行いました。
![](https://cdn-images-1.medium.com/max/1600/0*mSoDok5QFo6i0POm)
### 作ったもの
私は「マルチモーダル入力とOptical Flowによるリアルタイムスポーツ実況システム S
Xcodeのクソデカ シミュレーターインストールをマシにする
ニッポンニンゲンという動物は見栄を張ってクソ高いiPhoneを買うのが大好きです。そしてアップル社はApp Storeからの収益を手放さないためにウェブアプリの普及を妨害しています。するといつかはその圧力に屈してiOS用にアプリを作らないといけないことになります。
iOS用にアプリを開発するにあたって、しかたなくマッキントッシュのマシンを使わされることになりますが、残念ながらマッキントッシュは開発者向けマシンではないため、開発者のUXは軽視されています。今回はアップル社によるクソ開発者体験の1つである、Xcodeのシミュレーターのインストールをマシにする方法をまとめます。
まずXcodeがクソデカなのでクソみたいにインストールに時間を要しますが、さらに実際にiOS用にアプリを開発するためにはiOS用のシミュレーターをインストールしないといけません。しかしこのシミュレーターの追加パッケージの容量が7GB以上もあるため、安定したネットワーク回線がないとインストールに失敗します。しかもインストールに失敗すると途中からダウンロードを再開してくれません。何度も最初からやり直す必要があります。
configuration?.imageが効かない時の解決方法
## はじめに
以下Pixivさんのチュートリアルを行っているときにconfiguration?.imageが効かない時のケースに遭遇したのでメモhttps://pixiv.github.io/ios-tutorial/tutorials/tutorial/practice8/
## 解決方法
### UIButtonのtypeをcustomからsystemに変更
systemにすることで、ボタンがシステム標準の処理を受けるようになり、UIButton.Configurationを使用して画像を設定した際に正しく反映されるようになりました。UIButtonのtypeをcustomに設定していたことが原因でした。
## customのまま画像が切り替わるようにする解決方法
### setImage(_:for:)を使用する
“`swift
heartButton.setImage(UIImage(systemName: illust.isFavorited ? “heart.fill” : “heart”), for: .normal)
“`この方法でもボタン
iOS / macOSの構造体をUserDefaultsに保存する
データやパラメータをひとかたまりにした構造体(struct)を丸ごとUserDefaultsに保存し、アプリ起動時に読み出す必要が出てきました。
そのためには構造体の定義時、`Codable`に対応させる必要があります。
“`swift
struct CEngineParameter: Codable {
private var _parameterType = EngineType.water
public var isEngineEnable = true
public var differenceHeight = Float(5)
public var differenceWidth = 32
…
…
}
“`
このように構造体を定義すると、`Codable`に対応したイニシャライザの実装が求められます。
下記のように、対応したイニシャライザを記述します。
“`swift
init(from decoder: Decoder) throws {
let container = try decoder.conta
iOSデバイスが実機かシミュレータかを判断する方法
iOSアプリでBluetoothを使ったアプリを開発しています。
macOSのシミュレータではBluetooth接続ができません。
シミュレータでデバッグするときは、`擬似的にBluetoothからデータが来たように見せかけるテストモード`を用意しました。
そのため、実機かシミュレータかを判断する必要があります。
“`swift
#if targetEnvironment(simulator)
private let isDemoMode = true
#else
private let isDemoMode = false
#endif
“`
これで実機を使わなくてもデバッグができるようになりました。
iOS / macOSアプリでAssets内の音声ファイルを再生する
開発中のiOSアプリで、Bluetoothから送られてくるデータで異常を検出したとき、「音」と「振動」で知らせる必要に迫られました。
まずはAVFoundationをインポートします。
“`swift
import AVFoundation
“`音声ファイルを用意します。今回はシンセサイザーのバーチャルアナログ音源を使って簡単なビープ音を作り、それをWAVファイルにエクスポートしました。
そのファイルAssetsへ入れます。
Assetsに音声ファイルをドラッグ&ドロップします。
ソースコード内で参照する名前をつけます。今回は「Sending Sound」という名前にしました。
![スクリーンショット 2024-06-02 21.52.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202602/a95d563b-6dff-f8d8-acc1-9f1592a73b0c.png)AVAudioPlayerのプロパティを宣言します。
“`swift
private var sending
プログラミング未経験のメンバーとチームを組み、数年かけて iOS アプリ「Macbeth」をリリースした話
こんにちは、Xi です。普段は iOS 開発をメインでしながら、Unity を用いたゲーム開発もしています。今回は iOS 開発を題材にしたチーム開発寄りの話になります。
## 伝えたいこと
– プログラミング未経験のメンバーには、プログラミング言語を体系的に学ぶ機会を作ってあげると良い
– モブプロなどを通して、エンジニアマインドを伝えると良い。実装やデバッグ過程を見せることで、飛躍的に伸びる可能性がある
– 進捗が無かったとしても、定期的に話す機会を作るだけで、長期的な開発は続けられる
– 序盤ほど適切なタスク割り振りは重要になる。雑に振ってしまうと、タスクの難しさでモチベーションが落ちてしまう
– 全てを自分がやろうとしないこと。適度な分担によって、心が軽くなり、一体感を持って開発を進められる皆さんも、仲の良い友人を巻き込んで、iOS アプリを作りましょう!💪
## 事の発端
大学の授業でのソフトウェア開発がきっかけで、リバーシに似た独自のルールを持ったゲームを思いつきました。このルールは、従来のリバーシにはない斬新なもので、何か形にしたいと常々考えていました。その頃、偶
個人開発で月1万円を稼げるようになった話。
## はじめに
こんにちは。こんばんは。おはようございます!
今回は個人開発話でも書いてみようと思います。個人開発で月1万円を稼げるようになるというのは僕にとって1つの目標でした。同じように月1万円稼げるようになりたいぞ〜!という人もいるかもしれません。そういう人にこの記事が少しでも参考になればと思っています。そして、実際にこの記事を読んで「個人開発をスタートした!」「眠らせてたアプリをバージョンアップした!」などのアクションにつながったとしたら、それが一番嬉しいです。
ちなみに僕はiOSアプリを開発しているので、iOSアプリによった話がメインです。
## 個人開発で一番大事なこと
### 大事なのは続けること
ごくごく当たり前のことで何の捻りもありません。でもやっぱりこれが一番大事です。とにかく続けましょう。まだ月1万円に到達していない人で、アプリを20回以上アップデートしたという人はほぼいないんじゃないかと思います。逆に言えば自分なりに考えながら、20回くらいアプリをアップデートできれば月1万円くらいであればクリアできると思います。
ちょっと根性論的になってしまっ
LiveActivityを導入してNotificationを利用したインタラクティブ性を持たせる part2
## インテントの作成
まず、インテントを作成していきます。
これはLiveActivityやDynamicIsland内に設置したボタンをタップした際の処理となります。“`TestIntent.swift
import AppIntents@available(iOS 17.0, *)
struct TestIntent: LiveActivityIntent {public init() {}
static var title = LocalizedStringResource(“Test”)public func perform() async throws -> some IntentResult {
return .result()
}
}
“`
このTestIntent内にNotificationCenterの処理を追加していきます。
また、固有のNotification.Nameを使用するためにNotification.Nameの拡張を行なっていきます。
TestIntent.swiftファイル内のコードは以下のようになります。
“`
LiveActivityを導入してNotificationを利用したインタラクティブ性を持たせる part1
## LiveActivityの導入
LiveActivityの導入はFile→New→Targetから、「Widget Extension」を選択します。そこでInclude Live Activityがあるのでチェックを入れます。
なお、info.plistのSupported Live Activityをtrueに設定しておきます。## LiveActivityを起動
デフォルトで作成されるstructのプロパティにcontentStateを追加していきます。
“`LiveActivityAttributes.swift
struct LiveActivityAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
// Dynamic stateful properties about your activity go here!
var emoji: String
}// Fixed non-changing