- 1. 【SwiftUI】TimelineViewを使ってデジタル時計を作る
- 2. 【React Native】Expo製のiOSアプリでService Workerを使う
- 3. Apple キャンペーンリンクの作り方
- 4. Bitriseのビルド環境に事前にインストールされているものが何かを知る方法
- 5. [Swift] 一度だけ変更可能なプロパティを実装する方法
- 6. Xcode13でsalesforceHybridAppをビルドできないことの対応
- 7. 【SwiftUI】図形の表示
- 8. WWDC2022で発表されたSwiftUIで使えるハーフモーダルを少し調べた
- 9. 【Flutter】Swift Compiler Error (Xcode): Cannot find ‘GeneratedPluginRegistrant’ in scopeを解決する
- 10. 【Xcode】Playgroundの開き方
- 11. PC表示にしか対応してない大学のポータルサイトの時間割を見やすくアプリで表示する
- 12. [Swift] SwiftUI + Particle でリッチな演出を作る – 雨編
- 13. [iOS]設定アプリで許可(位置情報・カメラアクセスなど)を変更してから該当アプリに戻るとクラッシュする
- 14. 【Swift】オプショナルのアンラップ方法
- 15. 超リアルなスマホ(iOS)のクローンを作る!
- 16. Firebase In-App Messagingを試してみる(iOS)
- 17. [SwiftUI] PreferenceKeyの基本的な仕組みを知る
- 18. iOSアプリバージョンを取得するユーティリティ
- 19. SwiftのTableViewの再利用機能によってCell内のUIButtonのtagがうまく取得できない
- 20. CTF情報収集のiOSアプリを作った
【SwiftUI】TimelineViewを使ってデジタル時計を作る
# はじめに
iOS15から`TimelineView`というものが登場していたらしいです
コンポーネント一覧を見ていたら発見しました笑
気になったので`TimelineView`を使用して簡単なアプリを作成しようと思います。# 完成形
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/257b146a-ef0d-f222-e6ed-69b67fab5b3f.gif)# 完成コード
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
GeometryReader { geo in
ZStack(alignment: .center) {
Color(red: 132/255, green: 209/255, blue: 78/255).edgesIgnoringSafeArea(.al
【React Native】Expo製のiOSアプリでService Workerを使う
以前開発していたExpo製のアプリでService Workerを使用することになったのですが、Androidでは問題なく動作するのに対して、iOSではService Workerが動作せずハマりました。
というのも、iOSのWKWebViewではデフォルトでService Workerが使用できないようになっているためでした。
わかってしまえば簡単ですが、WKWebViewでService Workerを使用するための設定や手順で躓いた点をまとめました。# iOSにおけるWebView
大前提として、iOSのWebViewにはWKWebViewとSFSafariViewControllerがあり、それぞれ使用できるAPIやカスタマイズできるポイントが異なります(UIWebViewは非推奨なので除外してます)。|| WKWebView | SFSafariViewController |
|:-:|:-:|:-:|
|Service Worker|iOS 14.0から使用可能|iOS 11.3から使用可能|
|見た目のカスタマイズ|自由にカスタマイズ可能|一部しか変更できない|
Apple キャンペーンリンクの作り方
### これは
本業でキャンペーンリンクについて調べたので、備忘録を兼ねてまとめます。キャンペーンリンクとはアプリまでのURLに任意のパラメータを付与したもので、
そのパラメータごとのダウンロード数を見ることができます。基本的にこちらを参考にしてますが、少しわかりづらいところもあるので、下に詳しく書きます。
[キャンペーンリンクとは](https://developer.apple.com/jp/app-store/measuring-app-performance/)
[キャンペーンリンクの作り方](https://help.apple.com/app-store-connect/?lang=ja#/itcfa7936330)### 実際の作り方
1.App Store Connectにログインして、”Appアナリティクス”を選択します。
![スクリーンショット 2022-06-30 17.09.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393442/cd5a460a-
Bitriseのビルド環境に事前にインストールされているものが何かを知る方法
Bitriseのビルド環境(Stackと呼ぶ)では、HomebrewやCocoaPods、Bundlerなど、iOSアプリをビルドするために必要なツールが事前にインストールされています。
ただ、これらのツールのバージョンがいくつなのか、他にどんなツールがインストールされているかを知りたいことがあります。実は、以下のリポジトリにStackに関する情報がまとまっています。
https://github.com/bitrise-io/bitrise.io
例えば、現在の最新版であるXcode13.4のStackの情報はこちらです。
https://github.com/bitrise-io/bitrise.io/blob/master/system_reports/osx-xcode-13.4.x.log
Homebrewのバージョンは`3.4.11`であることがわかります。
![Cursor_と_https___raw_githubusercontent_com_bitrise-io_bitrise_io_master_system_reports_GEN
[Swift] 一度だけ変更可能なプロパティを実装する方法
初期値はnilで、その後1回値を代入したら、その後何度代入しても値が変わらないプロパティを実装したい。
didSetを使うと、以下のようにシンプルに実装できました。
“`swift
struct User {
var id: Int? {
didSet {
if oldValue != nil {
id = oldValue
}
}
}
}
“`“`swift
var user = User()
print(user.id) // 初期値はnil
user.id = 1
print(user.id) // 1に変わった
user.id = 2
print(user.id) // 1のまま変わらない
“`
Xcode13でsalesforceHybridAppをビルドできないことの対応
1.legacy build system から new build systemに変更
そしてmultiple commands produceというエラーがありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736127/f21f1dbc-daf6-e409-3940-a99f35794b1e.png)2.ターゲット配下のCordovaLibを右クリックしてremove from referenceを選択。 そしてビルドできるはず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736127/c8248e29-9537-c6d6-64e4-72430cad3908.png)
【SwiftUI】図形の表示
# カプセル型
![Simulator Screen Shot – iPhone 12 – 2022-06-29 at 15.57.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e9fedac0-6481-cdd8-051f-b4c9515e4a92.png)
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
Capsule()
.frame(width: 100, height: 50)
}
}
“`
# 円形
![Simulator Screen Shot – iPhone 12 – 2022-06-29 at 16.00.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d1ec8439-94be-2a45-7f7e-5d
WWDC2022で発表されたSwiftUIで使えるハーフモーダルを少し調べた
## まえがき
2021年のWWDCでUIKitでハーフモーダルが発表され、
SwiftUIでも欲しい、、、!自作したり、
PartialSheet https://github.com/AndreaMiotto/PartialSheet
を使っていたりしましたが、
公式にiOS16から出たので、どんなものか軽く調査していきます。“` swift
struct ContentView: View {
@State var showModalSheet = falsevar body: some View {
Button(“シートを開く”) {
showModalSheet = true
}
.sheet(isPresented: $showModalSheet) {
ZStack {
Color.gray.opacity(0.3)
Text(“test”)
}
【Flutter】Swift Compiler Error (Xcode): Cannot find ‘GeneratedPluginRegistrant’ in scopeを解決する
`flutter build ios`で謎のエラーが出るようになってしまった・・・
“`
$ flutter build ios(中略)
Failed to build iOS app
Error output from Xcode build:
↳
2022-06-28 17:54:50.481 xcodebuild[72631:2386405] Requested but did not find extension point with identifier Xcode.IDEKit.ExtensionSentinelHostApplications for extension Xcode.DebuggerFoundation.AppExtensionHosts.watchOS of plug-in
com.apple.dt.IDEWatchSupportCore
2022-06-28 17:54:50.481 xcodebuild[72631:2386405] Requested but did not find ext
【Xcode】Playgroundの開き方
# 方法
Xcodeを起動します
メニューバーの「File」を選択します。
![スクリーンショット 2022-06-28 14.53.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/844411fc-82e6-93f1-5e60-561356d5a262.png)「New」を選択して、「Playground」を選択します。
![スクリーンショット 2022-06-28 14.56.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f292d203-5f01-4877-5b2d-6953b732d6d7.png)「Blank」を選択して、「Next」を選択します。
![スクリーンショット 2022-06-28 14.59.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3d7
PC表示にしか対応してない大学のポータルサイトの時間割を見やすくアプリで表示する
# はじめに
私の通っている大学のポータルサイトはPC画面表示にしか対応していません。
そのため周りの友人は*「スマホで見るたびにストレスが溜まるんよね」*
とポータルサイトを見るたびにぼやいていました。私自身、同じように日々ストレスを感じていましたので、スマホで見やすく表示できるアプリを作ってみようと頑張ってみました。
今回はそんな奮闘の一部である「スクレイピング」にフォーカスを当てて備忘録を書いてみます。# 環境
・開発環境
Swift 5
Xcode 13.4CocoaPods
Alamofire
※環境の構築はスキップします。・ポータルサイトのスペック
Active Academy Advance という大学経営システム(?)
結構いろんな大学で使われてるっぽい。ASP.NET(.aspx)
# .aspx ってなんやねん
まずここで躓きました。
htmlじゃないんかい。。。[ASP.NETとは](https://dotnet.microsoft.com/ja-jp/learn/aspnet/what-is-aspnet)
私自身、講義でHTML
[Swift] SwiftUI + Particle でリッチな演出を作る – 雨編
## 本記事では
– 通常の UI では実現できない **リッチな演出** を作りたい
– **Particle** を使ってみたい、学んでみたいという人向けに、Particle を身近に感じてもらいたいと思っています。
また UIKit ではなく **SwiftUI** を利用することで、モダンで高速な開発を目指します!### 環境
– macOS 12.2
– Xcode 13.3.1## Apple の天気アプリ
Apple の天気アプリを使ったことがあるでしょうか?雨が降っている日には、アプリ内でも雨が降っており、こういう体験良いな〜と思った人もいるかと思います。この雨も Particle で再現可能な演出です。
そもそも **Particle** とは、**無数の同一な画像を使って、それらに様々なランダム性を付与して放出する** 技術です。かなり砕けた表現ですが、本記事ではこのくらいの理解で十分でしょう。雨に準えて表現すると、**単一の雨粒画像を使って、その画像の大きさや速度、色にランダム性を付与し、上から下に放出する** というイメージですね!
[iOS]設定アプリで許可(位置情報・カメラアクセスなど)を変更してから該当アプリに戻るとクラッシュする
どうやらiOS側のバグ(仕様?)である模様。。。
参考
[Stack Over Flow](https://stackoverflow.com/questions/12652502/app-killed-by-sigkill-when-changing-privacy-settings)
[Developer Forums – App crashes when changing privacy settings](https://developer.apple.com/forums/thread/64740?answerId=277988022#277988022)
【Swift】オプショナルのアンラップ方法
# 強制アンラップ
“`swift
var text: String? = “Hello world”print(text!)
// Hello world
“`# guard
“`swift
var text: String? = “Hello world”guard let text = text else { return }
print(text)
// Hello world
“`# if let
“`swift
var text: String? = “Hello world”if let text = text {
print(text)
}// Hello world
“`# デフォルト値
“`swift
var text: String? = “Hello world”print(text ?? “”)
// Hello world
“`
超リアルなスマホ(iOS)のクローンを作る!
# スマホ(iOS)のクローン
## 今回作ったもの(開発中)
[iOSのクローン](https://mf3px.sakura.ne.jp/PhoneClone/#p4)
![20220626_184247.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471258/6c5ad4a1-6f76-510e-348d-d152859a8144.gif)## 製作物の特徴
– iOSの特徴を捉えた触れるUI
– YouTubeの簡単なアプリ
– ピアノ(実際に音が鳴ります)
– 投稿掲示板(PHP)
– ロック画面,設定画面
– 通知,アラートの機能
– 下のホームバー(黒色の細長いボタン)をクリックするとホーム画面へ
![JointPics_20220626_190051.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471258/2fa09870-0f76-05ec-83d7-32bb038c6872.png)
Firebase In-App Messagingを試してみる(iOS)
# 概要
– アプリ内で表示させるポップアップを広報担当者レベルで出したいという要望が出そうなため、Firebaseコンソール画面で操作できるFirebase In-App Messagingを試してみる。BigQuery連携してユーザーセグメントを作成していければサーバー担当者の負担を減らせないかな・・・。# Firebase In-App Messagingについて
– ドキュメント
– https://firebase.google.com/docs/in-app-messaging?hl=ja
– Firebaseコンソール
– https://console.firebase.google.com/?hl=ja# 前提
– Firebaseプロジェクトを作成していること
– [Firebase を Apple プロジェクトに追加する](https://firebase.google.com/docs/ios/setup?hl=ja)## プロジェクトに Firebase In-App Messaging SDK を追加する(podでも良さそ
[SwiftUI] PreferenceKeyの基本的な仕組みを知る
子ビューから親ビューにデータを渡す仕組みとして頻繁に使用するPreferenceKeyですが、
– reduce()メソッドの実装ってこれで合ってるんだっけ?
– onPreferenceChangeにはどういう値が入ってくる?といった点について、毎回デバッグして調べてたので、改めて整理しました。
# コード例
ビューとPreferenceKeyを以下の通り実装します。
“`swift
struct ContentView: View {
var body: some View {
VStack {
Color.clear
.preference(key: StringPreferenceKey.self, value: “Rectangle1”)Color.clear
.preference(key: StringPreferenceKey.self, value: “Rectangle2”)Color.
iOSアプリバージョンを取得するユーティリティ
# バージョン取得ユーティリティの実装例
iOSアプリの現在のバージョンを取得するコードは以下のように実装できます。
“`swift
Bundle.main.infoDictionary![“CFBundleShortVersionString”] as! String // いわゆる「アプリバージョン」
Bundle.main.infoDictionary![“CFBundleVersion”] as! String // いわゆる「ビルドバージョン」
“`これらをまとめたユーティリティは例えば以下のように実装できます。
“`swift
public enum AppVersion {
public static func appVersion() -> String {
info(key: “CFBundleShortVersionString”) as! String
}public static func buildVersion() -> String {
info(key: “CFB
SwiftのTableViewの再利用機能によってCell内のUIButtonのtagがうまく取得できない
Swiftのテーブルビューはスクロールする際にセルを再利用する。
そのため、テーブルビューのセル内にUIButtonを設定している場合、
スクロールするとUIButtonのTagとindexPath.rowと整合性が合わなくなってしまう問題に直面した。:::note alert
よくあるセル内にUIButtonを設定するコードでは、
タップしたセル内のUIButtonのindexPath.rowとsender.tagが合わない
:::
“`Swift
// Cellの内容
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: “Cell”)// UIButton
let button = UIButton()
button.tag = indexPath.row
// 押
CTF情報収集のiOSアプリを作った
# CTF情報収集 アプリ
## 概要
本記事では、SwiftUIでCTF情報を収集できるアプリケーションを開発したので、実装方法の紹介をしようと思う。## アプリビュー
## 実装方法
開発言語: SwiftUISwfitUIで[CTF Time](URL “https://ctftime.org/”)のAPIを叩き表示している
## 今後の展開
CTFの情報だけでなく、セキュリティ関連のニュースも表示するように拡張していく。