- 1. [Swift] 重ね合わせの色を生成する(アルファブレンドする)
- 2. 【Flutter】iOS/Android/WebでFirebase Firestoreを使えるようにする。
- 3. 【Swift】Firestore × Codable 〜取得データを簡単にデコード〜
- 4. iOSのウィジェットを対応する上で知っておきたかった点
- 5. SwiftUIでもprintデバッグしたい!!
- 6. npx react-native run-ios できない for 0.63~
- 7. [iOS] ipaファイル内のFrameworkを閲覧する
- 8. 2021/1 Google Play | AppStore 対応期日カレンダー
- 9. protocolを使ったdelegateについて
- 10. PDFのアルファチャンネルをグレースケールで見る方法
- 11. [Swift] CoreLocationを使って現在地の経度と緯度を取得するサンプル
- 12. ARKit、SceneKitのtransform(4×4行列)の使い方を簡単に確認できるPlayground Code
- 13. No Code開発ツールが使っているクロスプラットフォームフレームワーク
- 14. JUCE: バックグラウンドでの再生On/Offのコントロール
- 15. 卒論の代わりにflutter✖️firebaseでスマホアプリを作ってみたので振り返る。
- 16. extensionを用いて可読性を上げる
- 17. RxSwiftのObservableでON/OFFの状態遷移を表現
- 18. 【Flutter】エラー対応 assets_audio_player
- 19. このAppは、整合性を確認できなかったためインストールできません。
- 20. iCloud DriveをOn/Offした時の挙動に関して
[Swift] 重ね合わせの色を生成する(アルファブレンドする)
Swiftで、**アルファ付きの色同士を重ねたときの色を取得する(アルファブレンドする)**処理の実装方法。
こんな感じです。## 実装
“`swift:UIColor+overlayColor.swift
extension UIColor {
/// 色を重ね合わせたときの色を生成する
/// 参考 https://ja.wikipedia.org/wiki/アルファブレンド
func overlayColor(_ otherColor: UIColor) -> UIColor {
var (r1, g1, b1, a1) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))
var (r2, g2, b2, a
【Flutter】iOS/Android/WebでFirebase Firestoreを使えるようにする。
# はじめに
昨年後半よりFlutter入門して社内用アプリを作っています。
今回はFirebaseのFirestoreを使えるようにします。# 更新履歴
2021.2.11 初回投稿# 環境
– macOS Big Sur(11.2)
– Flutter (Channel beta, 1.26.0-17.2.pre, on macOS 11.2 20D64 darwin-x64,
locale ja-JP)
– Android toolchain – develop for Android devices (Android SDK version 30.0.3)
– Xcode – develop for iOS and macOS
– Chrome – develop for the web
– Android Studio (version 4.1)
– VS Code (version 1.53.1)# 参考にしたサイト
– [Cloud Firestore を使ってみる | Firebase](https://firebase.googl
【Swift】Firestore × Codable 〜取得データを簡単にデコード〜
最近、iOSアプリ開発で`Cloud Firestore`を使っているのですが、何も気にせず使っていたら1つ気になることが、、、
**Firestoreから取得したデータのデコードがめんどくさい**
WebAPIからJSONで取ってきたデータは、Codableで簡単にデコードできるので、Firestoreから取ってきたデータも簡単にデコードしたい!と思い調べてみたので、記事にしました。
Codableについては、こちらの記事が大変参考になるかと思います。
https://qiita.com/UJIPOID/items/2c436a80f1167f7bcac0## リファクタリング前のコード
`Firestore` × `Codable`を導入する前のコードをこちらに貼っておきます。
“`swift
import FirebaseFirestore// MARK: – Menu
struct Menu: Codable {
let id: String
let category: String
let imageName: String
le
iOSのウィジェットを対応する上で知っておきたかった点
業務で自分がウィジェット対応した際に必要だった知見が何個かあったのでまとめておく:iphone:
これからウィジェット対応する人の手助けになれば:muscle:## サイズ指定
[supportedfamilies](https://developer.apple.com/documentation/widgetkit/staticconfiguration/supportedfamilies(_:))で指定“`swift
struct SampleWidget: Widget {
var body: some WidgetConfiguration {
StaticConfiguration(kind: “sample”, provider: SampleWidget.Provider()) { entry in
SampleWidgetEntryView(entry: entry)
}
.supportedFamilies([.systemSmall, .systemMedium])
SwiftUIでもprintデバッグしたい!!
**バッドノウハウです**。
通常SwiftUIでは`body`の中に`print`を書くことができません。
“`Swift
var body: some View {
let width: CGFloat = 100 + 100
print(width) //エラー
Rectangle()
.frame(width: width)
}
“`
この原因は`print(width)`が実は`Void`の値`()`を返していることです。そのため、`ViewBuilder`の側が`Void`の値を`View`として解釈しようとして、エラーになります。パッと思いつく解決策としては下のように、`body`の外で計算型プロパティを作って内部で`print`を呼ぶ方法でしょうか。もちろんクロージャを即時実行する形でもいいと思います。
“`Swift
var width: CGFloat {
let _width: CGFloat = 100 + 100
print(_width)
retur
npx react-native run-ios できない for 0.63~
#経緯
react-nativeを久々に触ったらなんかios動かなくなった。
いろいろアップデートした。二日かかった。いろいろ試した。
結果これに落ち着いたので共有します。#対応案①
プロジェクト作り直し“`
npx react-native init MyApp –version 0.62
“`#対応案② こちらがおすすめ
以下に書いてありました。
https://github.com/facebook/react-native/issues/30836PodFileを書き換える方法です。
“`
#use_flipper!
use_flipper!({ ‘Flipper-Folly’ => ‘2.3.0’ })
“`podfileを書き換える方法らしい。
最近導入されたflipperさんがやらかしているとかなんとかくそはまって公式のドキュメント通りできなくて、、、
よかった。また明日からがんばれます・・・
[iOS] ipaファイル内のFrameworkを閲覧する
# はじめに
iOS14対応のIDFAに関して、`AppTrackingTransparency.framework`を内包した場合、トラッキングの許可を求めるダイアログは必ず出さなければならないようです。よって、このFrameworkを取り除くことにしましたが、Xocdeの`Build Phase`->`Link Binary With Libraries`にも`AppTrackingTransparency.framework`はありませんでした。
では、ipa内包の中身もみてみようということで見方は下記にまとめました。## otoolを使用
`otool`コマンドは、実行ファイルやライブラリのオブジェクトファイルを分析し、結果を表示するコマンドです。“`
otool option FileName
“`
|option |detail |
|——–|——–|
|-L |指定したファイルが使用する共有ライブラリを表示する |
|-M |ダイナミックリンクライブラリのモジュールを表示する |
|-f |ユニバーサル
2021/1 Google Play | AppStore 対応期日カレンダー
![eyecatch_2101StoreCalendar-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218415/2380f173-a80f-ac3c-e52c-fef2a22c9ffa.png)
※ 本稿は [Tech Inside Drecom](https://tech.drecom.co.jp/?_src=qiita) に掲載された記事、「[2021/1 Google Play | AppStore 対応期日カレンダー](https://tech.drecom.co.jp/googleplay-appstore-calendar-202101/?_src=qiita)」の Qiita 出張版です。
—
こんにちは、SRE部クライアントグループの Smith です。
SRE というとサーバ・インフラのイメージがありますが、なぜクライアント?っていう部分は別の機会にお話したいと思います。本稿では SRE部として収集し、社内共有している`対応期日のある Google Play
protocolを使ったdelegateについて
protocolとは、「手続き・手順」といった意味だが、
“こういった実装をしてくださいね”といった「約束事・決まり事」と解釈した方が、
iOS開発においては理解しやすい。“`swift
protocol FooProtocol {var id: Int { get }
func test1()
func test2()
func test3()
}
protocol FooProtocol2 {
var name: String { get }
func test4()
}
“`
#### 特徴
– 中身のないクラスのようなもの
– クラスなどに準拠されることが前提で作られる
– クラスの継承より柔軟である#### 使用時
“`swift
class BarClass: FooProtocol {var id: Int = 0
func test1() {
print(“BarClassのtest1”)
}fun
PDFのアルファチャンネルをグレースケールで見る方法
もらったアイコンの色が、なーんか薄いんだけど、みたいな時に、比較的簡単にアイコンのalphaチャンネルの値を確認できます。
# PDFのアルファチャンネルを確認する方法
imagemagickを入れておく。
“`bash
brew install imagemagick
“`PDFのアルファチャンネルを、グレースケールPNGに変換して、プレビュー。
“`bash
convert -colorspace RGB -alpha extract icon.pdf icon_alpha.png
open icon_alpha.png
“`開いてみて、黒い部分はAlpha 0.0、白い部分(0xFFFFFF)はAlpha 1.0です。
[Swift] CoreLocationを使って現在地の経度と緯度を取得するサンプル
# 概要
`CoreLocation` を使って現在地の経度と緯度を取得するサンプルです。# 環境
Xcode 12
Swift 5# サンプルコード
“`swift:ViewController.swift
import UIKit
import CoreLocationclass ViewController: UIViewController {
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()// locationManagerのデリゲートを受け取る
locationManager.delegate = self
// アプリの使用中に位置情報サービスを使用する許可をリクエストする
locationManager.requestWhenInUseAuthorization()
// ユー
ARKit、SceneKitのtransform(4×4行列)の使い方を簡単に確認できるPlayground Code
ARKit、SceneKitでは、transformプロパティを使って、3D変換(回転、拡大縮小、投影、移動)をすることがあります。このプロパティの設定を確認できるPlayground Codeを作りました。
<仕上がり>
XcodeのPlaygroud上でSceneKitの描画をしています。### transformプロパティとは
4×4行列で、SCNMatrix4型になっています。
“`swift
node.transform = SCNMatrix4(
m11: 0, m12: 0, m13: 0, m14: 0,
m21: 0, m22: 1, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41
No Code開発ツールが使っているクロスプラットフォームフレームワーク
No Code開発ツールにはiOS/Androidアプリを出力できるものがある。
なんらかのクロスプラットフォーム技術が使われていると思われ、興味を持ったのでざっくり調べてみた。## 調査結果
8個のサービスについて調査したところ、– React Nativeが、2サービス(Adalo/Thunkable)で使われている
– Flutter、Capacitor、Cordovaを使っているサービスは探した範囲では見当たらなかった。## 調査結果詳細
ざっくり調べたので、すぐに分からなかったところは?を入れてある。|サービス名|Webアプリ|iOSアプリ|Androidアプリ|iOS/Androidアプリフレームワーク|
|:–|:–|:–|:–|:–|:–|
|[Glide](https://www.glideapps.com/)|o| x |x| -|
|[Adalo](https://www.adalo.com/)| o |o| o |React Native (根拠 https://developers.adalo.com/docs/workflow/c
JUCE: バックグラウンドでの再生On/Offのコントロール
##課題##
JUCE/ProjucerのAudio Pluginテンプレートで作成したiOSアプリは、CapabilitiesでAudioのバックグランド再生をOnにするとその通りバックグラウンドでも再生できるが、常に再生になっている。これはユーザーにOn/Offを委ねたいところだが、テンプレートにはその機能は備わっていない。##前提##
JUCE/ProjucerでAudioプラグイン/アプリを作っている。##解決方法##
https://forum.juce.com/t/ios-background-processing/38308 に答えがあるのですが、JUCEApplicationBase::suspended()がバックグラウンドに回った時に呼ばれ、JUCEApplicationBase::resumed()がフォラグラウンドになった時に呼ばれるので、これらをオーバーライドすればできます。Projucerの設定でPreprocessor DefinitionsにJUCE_USE_CUSTOM_PLUGIN_STANDALONE_APP=1を書いておいて、juce
卒論の代わりにflutter✖️firebaseでスマホアプリを作ってみたので振り返る。
今回は自分がスマホアプリを作った話を記事にしたいと思います。
# 作ろうと思った背景
自分は文系大学生なのですが、ゼミに入っておらずその関係で卒論を書かなくても卒業ができます。~~**(イージー大学生)**~~
2021年3月に卒業予定で、夏あたりから周りの友達が「卒論やばい〜?」、「卒論どうしよう〜?」と騒ぎ始めました。「俺は楽だぜっ!!」って思いつつも、自分の大学4年間の成果ってなんだろうってモヤモヤしてました。学問自体は好きで面白かったのですが、通学に1時間半かかるのと授業がつまらなかったので行く気が起きず、効率よく単位をとることだけを考えて授業を受けていました。その代わりに1年生の終わりから興味のあったことを色々勉強して、効率(お金と時間)という観点からゼミには入らなかった次第です。(入ったんですけど、お金がかなりかかるゼミでやめました。そんな余裕のある家庭でもないので。)
色々勉強した中で一番ハマったのがプログラミングで途中だるくなったりもしましたが、独学期間2年、インターンも半年経験させて頂きました。また就活では、そんな経験も評価されて第一志望のIT企業に就職する
extensionを用いて可読性を上げる
ViewController の定義時に全ての Delegate を継承せず、
適切に extension で分けると可読性が上がります。よく用いられるtableViewの例を記してみます。
#### FatViewControllerの例
“`swift
final class FatViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {// 省略
// セルタップ時のメソッド
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {// 何らかの処理
}
// セルの高さを決定
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> C
RxSwiftのObservableでON/OFFの状態遷移を表現
# 環境
RxSwiftとRxCocoaはCocoaPodsなどでインストールしましょう。– XCode (12.2)
– Swift (5.3.1)
– RxSwift (6.0.0)
– RxCocoa (6.0.0)# 実装(ON/OFF)
上層で流れてくる値に関わらずストリームに流れる値がfalse->true->falseと切り替わる関数です。
Rxオペレーターの`scan()`を使って前回の状態を参照しているところがポイントです。
`scan()`は購読するだけでは初期値を流さないので`startWith()`で初期値を流しています。“`swift
extension Observable {
func flipflop(initialValue: Bool) -> Observable{
scan(initialValue) { current, _ in !current }
.startWith(initialValue)
}
}
“`適当なViewControllerで動くサン
【Flutter】エラー対応 assets_audio_player
#エラー内容
下記Gitでイシューに上がっていますが、根本的な解決策はまだ挙がってなさそうです。
https://github.com/florent37/Flutter-AssetsAudioPlayer/issues/399“`
e: /Users/yo4hi6o/flutter/.pub-cache/hosted/pub.dartlang.org/assets_audio_player-2.0.13+1/android/src/main/kotlin/com/github/florent37/assets_audio_player/Player.kt: (542, 5): ‘handleMessage’ overrides nothing
e: /Users/yo4hi6o/flutter/.pub-cache/hosted/pub.dartlang.org/assets_audio_player-2.0.13+1/android/src/main/kotlin/com/github/florent37/assets_audio_player/Player.kt: (54
このAppは、整合性を確認できなかったためインストールできません。
App Distributionで配布していたipaが以下のエラーを出力しインストールできなくなってしまった。
“`
このAppは、整合性を確認できなかったためインストールできません。
“`正確には、インストールはできているのかもしれないが、アイコンをタップすると、このエラーが表示されアプリが起動できないという現象。
# 原因
distribution用証明書の期限が切れていたのが原因でした
iCloud DriveをOn/Offした時の挙動に関して
##前提##
iCloud Driveを使うようにアプリを設計している。##iCloud DriveをOffにする##
iOSの設定->アカウント->iCloud->iCloud Driveで一気に、または一覧からアプリ個別に
Offにすると、[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier: <コンテナのID>];がnilを返す。Onならば適切なURLが返ってくる。
例: “file:///private/var/mobile/Library/Mobile%20Documents/iCloud~com~yourdomain~yourapp/” 0x0000000283860310)アプリのファイルを保存する目的でiCloud Driveを使う場合、nilが返ってきたらfallbackとしてデバイス上に保存するようにしている(Documentsなど)。ややこしいのは、アプリの起動中でもこの設定は変えられてしまう可能性があることかな。適切な挙動としては、アクセスの必要があるたびにnilチェックを行っ