- 1. Xcode Cloudの導入〜App Store Connectへアップロードする手順
- 2. 【Flutter】TODO / タスク管理アプリを作成する方法
- 3. 複雑化するiOS・macOSの画像処理フローを理解し、開発効率を上げる方法
- 4. URLスキームを使わず任意のアプリで開くWebクリップ
- 5. 【Flutter】HTTP通信の基本(GET / POST)- http / dio パッケージを比較 –
- 6. SwiftUIの.tabItemがiOS 18.1で非推奨に -> 新しいTabに置き換えましょう
- 7. Flutter環境構築にあたってバージョンを確認しておくべきツール
- 8. 【 Flutter 】 個々のユーザに対してLINEメッセージ通知を送る機能の実現 (LINE SDK・LINE Messaging APIを利用)
- 9. [Swift] UIScreen.mainを使わずに画面の明るさを設定する
- 10. FireBaseSDKを組み込んだiOSプロジェクトをGitHub Actionsでビルドする方法
- 11. [SwiftUI] レビューリクエストの頻度を設定する方法
- 12. モバイルアプリエンジニアがiPadの管理にMDMを導入した話
- 13. [SwiftUI] iOSバージョンごとにSF Symbolsを変更する方法
- 14. AndroidエンジニアのためのXcodeショートカット
- 15. ジョブズの伝説的スピーチを知らない世代へ
- 16. 【iOS/macOS】iPhone / Mac メニューバーでテレビをみる
- 17. FlutterのshowDialogのAlertDialogサンプル
- 18. SwiftUIのAnimationについてふわっと学ぶ(transition編)
- 19. iOSアプリをAppStoreConnectに登録するまで
- 20. SafariのみCookieからデータ取得できない現象に苦しめられた話
Xcode Cloudの導入〜App Store Connectへアップロードする手順
## はじめに
本記事では [Xcode Cloud](https://developer.apple.com/xcode-cloud) を使用してCIを構築した際の手順を簡潔に紹介します。
**Xcode Cloudの導入 〜 ビルド成果物をApp Store Connectにアップロード** までの手順を紹介しています。ちなみに、現時点でのXcode Cloudでは無料で **25時間/月** のビルド時間が利用できるので、おそらく個人で使う分には無料プランで十分だと思います。
## 前提条件
Xcode Cloudを使用するための条件が [公式ドキュメント](https://developer.apple.com/documentation/xcode/requirements-for-us
【Flutter】TODO / タスク管理アプリを作成する方法
## 1. はじめに
この記事では、Flutterを使って基本的な機能を持ったTODO / タスク管理アプリを作成します。Flutterの基礎を学びながら、簡単なアプリを作ってみましょう。
## 2. タスク管理アプリの主な機能:
1. **タスクの追加(作成)**:
画面右下の「+」ボタンをタップすると、ダイアログが表示され、タスク名と締め切りを入力してタスクを追加できます。2. **タスクの編集**:
リスト上の任意のタスクをタップすると、編集ダイアログが表示され、タスク名や締め切りを変更することができます。3. **タスクの削除**:
タスクを左または右にスワイプすると削除されます。4. **タスクの完了/未完了の管理**:
リストの右側にあるチェックボックスをタップして、タスクの完了状態を切り替え、完了したタスクは削除します。5. **タスクのソート**
タスクの並び順として、締め切り日 (deadline) が近い順にタスクを並べています。6. **端末のストレージへのタスクの書き込み・読み込み**
端末のローカルストレージにタスクを保存し、アプリが
複雑化するiOS・macOSの画像処理フローを理解し、開発効率を上げる方法
OSやmacOSの開発では、画像処理において複数のフレームワーク(SwiftUI、UIKit、AppKit)を使いこなす必要があります。
しかし、これらのフレームワークがそれぞれ異なる画像形式やAPIを提供しているため、変換や互換性の確保が煩雑になることがあります。
この記事では、画像処理の煩わしさを解消するためのヒントを紹介します。
# 1. フレームワーク間の画像変換方法
UIKitの“`UIImage“`とAppKitの“`NSImage“`は異なる画像形式ですが、これらを相互に変換する方法が用意されています。たとえば、“`UIImage“`を“`CGImage“`に変換し、それを“`NSImage“`に渡すことで互換性を持たせることが可能です。
“`swift
if let cgImage = uiImage.cgImage {
let nsImage = NSImage(cgImage: cgImage, size: .zero)
}
“`
このように、Core Graphicsの“`CGImage“`を介して変換することで、画
URLスキームを使わず任意のアプリで開くWebクリップ
# 使途
# 結論
https://developer.apple.com/documentation/devicemanagement/webclip
– TargetApplicationBundleIdentifier を設定する
– 対応しているMDMがほぼなく、AC2.17もこの設定をGUI上で設定できない
– テキストエディタで編集・追記してやる必要がある
– To use this property, install the profile through MDM
– このパラメータはMDMからのインストールが必要
– と言いつつ、プロファイル手動インストールでも動いていたような気が
– 組織識別情報を持っていたせいかもしれないので基本MDMからで
– 挙動についてはきちんと確認する必要がある
– iOS標準系アプリ(Safariを含む)との相性があまり良くないように見える
– アプリ側の対応も必要か
– アプリ指定、フルスクリーン
【Flutter】HTTP通信の基本(GET / POST)- http / dio パッケージを比較 –
## 1. はじめに
アプリケーション開発において、HTTP通信は非常に重要な要素です。HTTP(Hypertext Transfer Protocol)は、クライアント(アプリ)とサーバー間でデータを送受信するためのプロトコルです。例えば、ニュースアプリがWebAPIを通して最新のニュースを取得したり、ユーザーが入力した情報をサーバーに送信してデータベースに登録する際に、HTTP通信が使用されます。
この記事では、代表的なHTTP通信パッケージである`http`と`dio`を比較し、さらに`httpbin`という登録不要のWebAPIに対して、GET / POSTリクエストを実装・動作確認する方法を解説します。
## 2. パッケージの比較
FlutterでHTTP通信を行う際に使われる主なライブラリとして、`http`パッケージと`dio`パッケージがあります。それぞれの特徴を以下の丸バツ表で比較してみます。
| 機能/特徴 | `http` | `dio` |
|————————–|——–|–
SwiftUIの.tabItemがiOS 18.1で非推奨に -> 新しいTabに置き換えましょう
最新のXcodeを使用していると、`.tabItem` ビューモディファイアを使おうとした際に、非推奨の警告が表示されることがあります。
![Screenshot 2024-10-09 at 10.52.53 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/1c975b2a-3887-4505-4e5c-ca10637bdf1e.png)
:::note warn
‘tabItem’は将来のiOSバージョンで非推奨になります。代わりに `Tab(title:image:value:content:)` を使用してください
:::Appleの開発者向けドキュメントでも示されているように:
![Screenshot 2024-10-09 at 10.53.19 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/bcad5ea3-7f40-8332-6932-f158a95c51d1
Flutter環境構築にあたってバージョンを確認しておくべきツール
| ツール | 確認コマンド |
|:-:|:-:|
| Flutter SDK | flutter –version |
| Dart SDK | dart –version |
| Xcode | xcodebuild -version |
| CocoaPods | pod –version |
| Android Studio | android-studio –version |
| Android SDK | sdkmanager –list |
| Gradle | gradle -v |
| JDK | java -version |
【 Flutter 】 個々のユーザに対してLINEメッセージ通知を送る機能の実現 (LINE SDK・LINE Messaging APIを利用)
### 1. はじめに
flutter × LINE の実装って本格的なものは知見がWeb上にほとんどなかったので、思い切って記事にしてみました。
今回、具体的には、個々のユーザに対してLINEメッセージ通知を送る機能を実現します。そのためには、以下の手順に沿って実装する必要があります。
– LINEログイン機能を実装し、アプリでLINEログインを行ったユーザのIDを取得
– LINEメッセージ通知機能を実装し、上で取得したユーザIDを宛先として、メッセージ通知単に、LINEログイン機能の実装、LINEメッセージ通知機能を個別で試すことは簡単ですが、それらを実用的に利用するには、各機能を連携させて使用する必要があります。
上記の機能をFlutterで実装した解説記事が見つからなかったため、本記事で解説しようと思います。多くのFlutter開発者の方々の助けになれば幸いです。
### 2. LINEログイン機能の実装
LINE SDKを用いる事で、LINEログイン機能を実装することができます。
### 2.1 LINE Developersの設定
LINE SDK
[Swift] UIScreen.mainを使わずに画面の明るさを設定する
## 背景
`UIScreen.main`がiOS17以降においてdeprecatedとなっていますが、`UIScreen.main.brightness`を用いない画面輝度の設定についての情報があまりなかったのでメモとして残しておきます。## 結論
`windowScene.screen.brightness`を使おう## サンプルコードと補足
画面輝度を調節するだけなのであまり意味はないですが、`windowScene`の取得を
`guard let windowScene = UIApplication.shared..connectedScenes.first as? UIWindowScene`
の形を避け、
`view.window?.windowScene`
の形をとっています。
(前者の実装だとiPadのマルチウィンドウ等、複数wIndowが存在する際に意図していないwindowを取得する可能性があるため)“`swift title:SampleViewController.swift
import UIKitfinal class SampleVie
FireBaseSDKを組み込んだiOSプロジェクトをGitHub Actionsでビルドする方法
# 課題
FireBaseSDKを組み込んだiOSプロジェクトでは、`GoogleService-Info.plist`というAPI Keyなどのシークレット情報を含むファイルをプロジェクトに含める必要があります。シークレット情報なので、そのままGitHubのリポジトリにPushすると情報漏洩する危険があるので、基本的には`GoogleService-Info.plist`はPushしないようにします。
しかしCI環境でビルドする際に、`GoogleService-Info.plist`がないとFireBaseSDKを組み込んだiOSプロジェクトはビルド出来ないため、ビルド時には`GoogleService-Info.plist`をどうにかして参照する必要があるのです。
※FireBaseSDKの導入方法
https://firebase.google.com/docs/ios/setup?hl=ja#add-config-file
今回は後続で記載する環境で、上記課題を解決した方法を記事にしてみます。
# 環境
– Xcode: 16
– CI: GitHub Acti
[SwiftUI] レビューリクエストの頻度を設定する方法
# 1. はじめに
アプリを開発する際、ユーザーからのフィードバックを得ることは非常に重要であり、レビューはユーザーがアプリをインストールするかどうかを決定する際の参考になります。
しかし、レビューリクエストは頻度が多いと、ユーザー体験を損なう可能性もあります。そこで、適切な頻度でレビューを促す仕組みを導入することが大切です。本記事では、SwiftUIを使って、アプリ内でビューの遷移回数に応じて`SKStoreReviewController`を用いたレビューリクエストを行う簡単な実装方法を紹介します。
ユーザーがある程度アプリを使い慣れた段階で自然にレビューを促すことで、ポジティブなフィードバックを得やすくし、UX(ユーザーエクスペリエンス)を向上させることができます。# 2. 完成イメージ
FirstViewに3回遷移した時にレビューリクエストが送られる。
![ScreenRecording_10-07-2024 10-30-54_1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38921
モバイルアプリエンジニアがiPadの管理にMDMを導入した話
スタートアップに転職して現場の業務で利用するiPadの準備が大変だなぁと思いMDMを導入・運用したので備忘録です。
# 前提
– 複数の店舗があり各店舗で社内向けアプリをインストールしたiPadを業務で利用
– 私はこのアプリを開発するエンジニア
– 店舗のスタッフはアルバイトの方たち
– 総台数約100台# MDM(モバイルデバイス管理)とは
> モバイル端末管理の略記。
> スマートフォンやタブレットなどの携帯端末を業務で利用する際に一元的に管理するための仕組み。
> MDMツールが提供する管理機能は、以下のようなものがある。
> ・端末紛失時のリモート制御(ロック、データ削除など)
> ・セキュリティポリシーやアプリケーションの配布、管理
> ・アプリケーションや機能の利用制限と監視引用:[ITトレンド](https://it-trend.jp/words/mdm)
# 導入のきっかけ
## キッティングの負荷が高い
– 共通のApple IDで1個1個ログイン
– App Storeから1個ずつ必要なアプリをインストール
– Wi-Fi情報の手動入力
[SwiftUI] iOSバージョンごとにSF Symbolsを変更する方法
# はじめに
iOS 18から新しいSF Symbolsが登場しましたが、アップデートしていない端末ではアイコンが何も表示されない問題に直面しました。ここでは、iOSバージョンごとに異なるSF Symbolsを表示する方法を紹介します。実装自体かなり簡単なので、役に立てていただければと思います。
# 実装
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
// iOSのバージョンによって使用するSF Symbolsを変更
if #available(iOS 18, *) {
// iOS 18以上の場合
Image(systemName: “numbers”)
.font(.largeTitle)
} else {
// iOS 18未満の場合
Image(systemName: “arrow.2.c
AndroidエンジニアのためのXcodeショートカット
# はじめに
今回は、AndroidStudioでよく使うショートカットのXCode版を紹介していきます
### 本文読み出し先検索
—
AndroidStudioでは、関数などの実行箇所や実装箇所を探すのにはcmd+clickですが、XCodeではcmd+Clickが使えるのは関数などの実装箇所のみで実際に呼び出している場所を探すのには該当関数を選択した状態でctr+cmd+shift+hを押す必要があります。
押しづらい上に覚えにくいので、SideBarにある虫眼鏡アイコンからCall Hierarchyで検索する方も多いみたいです。File検索
—
AndroidStudioではShift2回押しでファイルを検索できますが、XCodeではshift+cmd+oでプロジェクト内のファイル検索ができますコード整形
—
AndroidStudioではcmd+opt+Lでファイル内のコードを整形できますが、XCodeではctr+Iで整形することができます
### 最後に
備忘録としての役割が非常に強いですが、どなたかのお役に立てれば幸いです
AndroidStud
ジョブズの伝説的スピーチを知らない世代へ
## はじめに
13年前の今日、2011年10月5日は、あのスティーブ・ジョブズがこの世を去った日です。スティーブ・ジョブズと聞くと、多くの人がAppleやiPhoneを思い浮かべるかもしれません。
彼自身をよく知らない人や、名前は知っているがその人生までは知らない人も、彼の歩んできた道からは多くの教訓を学ぶことができます。
2005年にスタンフォード大学の卒業式で行った伝説的なスピーチ「3つの話」では、彼の経験を通じて人生の大切な教訓が語られています。この記事では、そのスピーチから「点を繋げること」「愛と喪失」「死」という3つのテーマを詳しく掘り下げ、ジョブズの偉大さを改めて讃えながら、彼のメッセージについて解説していきます。
![steve_jobs.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552881/4e67f674-53ec-1e58-39c1-edc96bd7ed0d.jpeg)
## 点を繋げること
### 大学を中退した理由
ジョブズは大学を中退しています。それには複
【iOS/macOS】iPhone / Mac メニューバーでテレビをみる
はい、緊急で書きました。
iOS pic.twitter.com/RaYwWtuMIs
— chanzmao (@maochanz) October 3, 2024
いろんなことできますね、ネットは。
デコードかキャッシュか、1分遅れです。
(更新中…)
FlutterのshowDialogのAlertDialogサンプル
– Android、iOS用でそれぞれ環境に合うDialogを出力する
“`dart
import ‘dart:io’;
import ‘package:flutter/cupertino.dart’;
import ‘package:flutter/material.dart’;class CommonDialogView {
static Futureshow (BuildContext context, String text) {
return Platform.isIOS
? _showCupertinoDialog(context, text)
: _showMaterialDialog(context, text);
}static Future
_showCupertinoDialog (
BuildContext context, String text) {
return showCupe
SwiftUIのAnimationについてふわっと学ぶ(transition編)
# はじめに
SwiftUIでAnimationさせるときにtransitionというModifierを見かけたのですが、これが何をやっているのかよくわかっていなかったので、ふわっと学びたいと思います。# 環境
– Xcode16
– iOS17# transitionとは
公式のドキュメントによると、Viewの表示、非表示切り替えの際のAnimationを制御するModifireのようです。https://developer.apple.com/documentation/swiftui/view/transition(_:)-5h5h0
>このビューが表示されたり消えたりすると、トランジションが適用され、アニメーション化が可能になります。
>次のコードは、条件に応じて MyView を表示し、表示または非表示になったときにスライド遷移を使用して表示します。
>“`
>if isActive {
> MyView()
> .transition(.slide)
>}
>Button(“Toggle”) {
> withAnimation {
iOSアプリをAppStoreConnectに登録するまで
# 目次
1. はじめに
2. 前提
3. 環境
4. 実施したこと
1. App ID作成
2. 証明書の設定
3. AppStoreConnectへの登録
5. 最後に
6. 参考## 1.はじめに
iOSエンジニアなのにiOSアプリをAppStoreに公開する方法を知らなかったので、どんなことをやる必要があるのか、実際に調べて、試してみました!
この記事では、AppStoreConnectに登録するまでに実施したことを紹介します。**公開までの大まかな流れ**
1. AppStoreConnectに登録
2. AppStoreに申請
3. AppStoreに公開
* 申請が通ると、AppStoreに公開可能となる**そもそもAppStoreConnectとは?**
AppStoreConnectとは、Appleが提供しているアプリの管理や申請を行うためのツールです。
アプリの名前や製造者名などを登録して申請することで、AppStoreに公開しても問題ないか確認することができます。
申請だけではなく、アプリの価格や年齢制限などの管理も
SafariのみCookieからデータ取得できない現象に苦しめられた話
## 背景
toC向けのフォームにて広告等流入経路識別のために独自IDを割り振り、URLパラメータへそれぞれ埋め込んでいた。## どんな仕組みか
各経路からWebフォームへ遷移する際にURLパラメータの各情報をCookieへ格納。その後コンバージョンでパラメータも併せて送信することで流入経路の識別に活用していた。## 問題点
### プライバシーの観点から、トラッキングやCookie無効化設定をしているユーザが増えている
Cookieありきで構築したシステムの信頼性が揺らいでおり、フローの調整が必要### Cookie利用可否判定のロジックが十分でない
元々は以下のようにdocuent.cookieの中身をチェックして判定していた。“`js
if(document.cookie != “”){
//処理
}
“`GTM・GAを利用していたこともあり、document.cookieが空のままフォームを訪れる状況は想定外だった。
ただし昨今のSafariではサードパーティスクリプトの呼び出しをブロック、または遅延させるようになっているようで、ユーザの初回訪問時に上