- 1. Freezedの使い方
- 2. サポーターズ エンジニア1on1面談イベントに参加してきた
- 3. iOSアプリでBrightcove SDKを使ってDRMコンテンツを配信するまでの話
- 4. Agoraを使った音声ライブ配信アプリの作り方
- 5. 機械学習で必殺技分類(動作分類モデル作成からiOSでの推論実行まで:失敗編)
- 6. Firebase Cloud Messaging(FCM)は中国では使えない
- 7. 【Swift】処理フローが「一発」でわかる非同期の順次処理の書き方
- 8. iOS シミュレーターに写真をドラッグ&ドロップすると PHPhotosErrorDomain エラーが発生する
- 9. ReactエンジニアがReact Nativeを使ってみた
- 10. 【Unity】iOSでウィンドウからSafeAreaを取得するプラグインを作る
- 11. RealityKitで顔と重なったオブジェクトを表示する(FaceMeshを非表示にする)
- 12. Ubuntu20.04LTSでReact NativeとExpoを試す
- 13. アプリのアップデートメッセージを眺めてみた
- 14. [iOS]Xcode13・iOS15・Storyboardから設定したUIButtonに設定した画像がうまく設定されない。
- 15. [Swift] Combine の flatMap で failure になると、以降は値が流れなくなる問題に対処する
- 16. 【?炎上、解消。】荒れたコメントや記事を見たくない人のためのアプリとその仕組み
- 17. [SwiftUI]ScrollViewの副作用を抑制する
- 18. SwiftUIでUIKitのビューの装飾をするためにUIAppearanceを使うのは間違っている
- 19. iOSアプリでFirebaseによるGoogleサインインの実装方法(初心者向け)
- 20. 【Swift】仕様変更が怖くなくなるif文の書き方 〜 enumを使ってSwiftらしく書く 〜
Freezedの使い方
#はじめにFreezedとは
簡単に言えばコピーメソッド等を含む**Immutable(不変)**なクラスを生成することができるパッケージのこと
Freezedでコードを生成することで便利なメソッドがいくつか使用できるようになる。:::note info
・copyWith
nullを割り当てることが可能な複製メソッド・==
同値であることの確認・toString
文字列化した時の結果・fromJson
Mapからの変換 ・toJson
Mapへの変換 :::
上記のメソッドを使用して開発を楽にしましょう!#Freezedの使用方法
## インストール“`pubspec.yaml
dependencies:
// @freezed などを使うために必須
freezed_annotation:dev_dependencies:
//コード生成するために必要
build_runner:
freezed:
// fromJson/toJson
サポーターズ エンジニア1on1面談イベントに参加してきた
# はじめに
B3 iOSインターン生の[にいまる](https://twitter.com/niimaru09)です。
逆求人イベントに参加してきたので、参考になるようにレポートを書いてみます。# サポーターズとは?
僕がいつも使ってる、学生エンジニア就活のサポートをしてくれるサービスです。(回し者じゃありません)https://talent.supporterz.jp
# どんなイベントなの?
一日に最大8社と面談できる逆求人イベントです。雰囲気はめちゃめちゃカジュアルでした!
参加するにはサポーターズ側で選考がありますが、選考を通り抜けると早期選考、自己紹介へのフィードバック、長期インターンのオファーなどがあり、非常に魅力的です。参加確定後は企業さんにする自己紹介の準備をするのですが、任意でサポーターズ側で自己紹介準備のための面談みたいなものに参加することができます。
僕は自己紹介に命かけてたので、自己紹介資料は3日くらいかけてみっちり作りました!
# 参加までの流れ
選考
↓
参加確定
↓
サポーターズ側でのサポート面談
↓
自己紹介の準備
↓
1on1面談イ
iOSアプリでBrightcove SDKを使ってDRMコンテンツを配信するまでの話
# はじめに
初めまして。株式会社運動通信社でスポーツブルアプリのiOSを担当している松川です。
今回はスポーツブルの一機能「[スポーツブルプレミアム](https://sportsbull.jp/premium/about/)」で動画配信を行う際に必要になったDRM有効化の手順をまとめました。
表題にもある通り、弊社では動画の再生に[Brightcove](https://www.brightcove.com/ja/)という動画配信プラットフォームを利用しているので、その環境でDRMコンテンツを再生するまでの流れになっています。
※DRMとはDigital Rights Managementの略。デジタル著作権管理のことで、音楽や映画などのデジタルコンテンツの著作権を保護する技術や機能の総称です# 流れ
1. AppleからFairPlay Streaming Deployment Packageを取得する
2. 証明書の発行(FairPlay Streaming Certificate、Application Secret Key)
3. 取得した情報をBrightcoveに伝
Agoraを使った音声ライブ配信アプリの作り方
## はじめに
プレミアム音声サービスNowVoiceのAndroidアプリ開発を担当しているkiyoです。
NowVoiceアプリでは、音声ライブ配信機能を提供しています。
この記事では、ライブ機能を実装するまでの導入手順や実装ポイントについてまとめました。## NowVoiceライブ配信機能
NowVoiceアプリのライブ配信機能では、単純なライブ配信機能の他にも以下のような機能を備えています。
そしてその機能のほとんどがAgoraSDKを介して実装されています。“`
## ライブ配信機能
– MAX4人の対談機能
– ホストがユーザを対談に招待する機能(招待機能)
– リスナー側がホストに対談をリクエストする機能(挙手機能)
– コメント投稿機能
– 課金型コメント投稿機能(スーパーチャット)
“`この記事では、AgoraSDKを用いた音声ライブ配信機能を実現するためのポイントについてご説明します。
## 目次
1. Agoraとは
2.
機械学習で必殺技分類(動作分類モデル作成からiOSでの推論実行まで:失敗編)
#動画を機械学習して、動作の種類を判定する
GUIで機械学習ができるCreateML(Macで実行可能)。
動作の分類(Action Clasification)もできます。
実は僕は今回学習に失敗したのですが、作業フローはひととおり書いたので、公開しちゃいます。**【こういうのが作りたかった】**
#手順(データセット準備)
###1、動画を集める。
分類したい動作の動画を集めます。
今回はこのようなアクションを用意してみました。
Firebase Cloud Messaging(FCM)は中国では使えないiOS/Androidアプリの開発を協業している他社担当者から、システムテストにおいて、
「プッシュ通知が届かない」
「iOS/Androidとも同じく」という報告があり、再現性を確認したのですが弊社側では再現せず…
同アプリはプッシュ通知にFirebase Cloud Messaging(FCM)を利用しています。
バックエンド側のログなどを追うと、どうやら、SDK経由で取得できるはずのプッシュトークンが取得できていない模様。で、協業他社によくよく聞いてみると、中国でテストをしている、とのことで、
調べたところ、FCMって中国(本土)では使えないんですね…(→参考リンク)同アプリは日本国内での利用が前提なので、協業他社に「プッシュ通知のテストだけは国内でお願いします」と依頼するだけで済んだのですが。
もしグローバルなサービスだったら、中国本土で使えるプッシュ通知mBaaSに乗り換えるなど、大幅なアーキテクチャ変更になるところでした。:cold_sweat:なお、FCMの公式ドキュメントではその辺りの制限事項に関する記述は見つけられませんでした。
参考リンク:
【Swift】処理フローが「一発」でわかる非同期の順次処理の書き方
## はじめに
今回は、スパゲッティコードにならないような順次処理を考えてみたので記事にしてみました。特定の順番で毎回実行される処理って、条件分岐や繰り返しが無いので、シンプルに書くことができます。
しかし、非同期で実行される処理がある場合などは、可読性を意識して書かないと、案外メチャクチャになりがちです。(←過去の経験より)## この記事で学べること
– 順次処理とは?
– 非同期で実行される順次処理を実装する上での課題はなにか?
– 処理フローを追いやすい順次処理の書き方結論だけ確認したい方は、`「処理フローを追いやすい順次処理の書き方」`から読んでいただければと思います。
## 順次処理ってなに?
指定した順番に沿って順番に実行されていくプログラムのこと日常生活にたとえてみると、
`朝起きる → 朝食を食べる → 歯を磨く → 着替える → 家を出る`
というような、一連の流れがこれに当てはまります。とてもとてもシンプルな構造ですので、一見プログラムもシンプルになると思われがちです。
## 非同期処理を含む順次処理の課題とは?
さっきの日常生活のたとえを、
iOS シミュレーターに写真をドラッグ&ドロップすると PHPhotosErrorDomain エラーが発生する
## 概要
macOS に保存されている写真を iOS のシミュレーターで使う際に、mac から シミュレーターにドラッグ&ドロップすればコピーできるとあったため、実施したところエラーが発生した。
## エラー内容
“`text
One or more media items failed to import:
ファイルパス: The operation couldn’t be completed. (PHPhotosErrorDomain error -1.)
“`## 解決方法
コピー元のディレクトリー(`xxx`)がダウンロードディレクトリー(`~/Downloads/xxx`)だったため、ホームディレクトリー(`~/xxx`)へ移動したところ解決した。
## 参照 URL
https://developer.apple.com/forums/thread/126307
ReactエンジニアがReact Nativeを使ってみた
#はじめに
もともとReactを使用してweb開発をしていましたが、React Nativeを使用したモバイル開発に関わることになりました。Reactを使っていた人間がReact Nativeを勉強してみた所感を書きたいと思います。本記事はReact Native公式ドキュメント[[1]]を参考に書いていきます。#前提
Reactが使える
TypeScriptが使える
モバイルは初めて環境構築と簡単な動作確認が知りたい人は前回の記事[[1]]で行っているのでそちらを参照してください。
#React Nativeの必要性
現在モバイル端末での使用OSはAndroidOSとiOSで二極化しており、なおかつそれぞれでの使用プログラミング言語も異なります。昔はiOSではObjective-C、AndroidではJavaが使用されていました。しかし、最近ではiOSではSwift、AndroidではKotlinという言語が使われており、2つのOS合わせると最大4つのコードが存在する可能性があるわけです。もちろんこれは開発効率の観点から見て良くなく、これを解決するためにReact Nati
【Unity】iOSでウィンドウからSafeAreaを取得するプラグインを作る
iOS 15でデバイスを回転させるとScreen.safeAreaが正しい値を返さないことがフォーラムで話題になっています。
>[Unity SafeArea is inconsistent between different starting rotations](https://forum.unity.com/threads/unity-safearea-is-inconsistent-between-different-starting-rotations.1173764/)Screen.safeAreaが正しい値を返さないのは何年も前からある現象で、UnityとしてはもうFixしたと言ってみたり、また再発したりを繰り返しています。
原因はUIViewのsafeAreaInsetsが正しい値を返さないことにあり、UIWindowのsafeAreaInsetsだと正しかったりします。
どうもウィンドウからビューにイベントの伝達がうまくいってないっぽく、これはUnityの責任というより、Appleの責任ではないかとも思われます。
UnityでiOSビルドしたプロジェクトを探すと、
RealityKitで顔と重なったオブジェクトを表示する(FaceMeshを非表示にする)
RealityKitでFaceAnchorを使うと、顔より後ろのARオブジェクトが透過されます。
この深度オクルージョンをオフにするには、“`swift
arView.renderOptions.insert(.disableFaceOcclusions)// iOS15からは.disableFaceMesh
“`
?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.comCore MLやARKit
Ubuntu20.04LTSでReact NativeとExpoを試す
#はじめに
React Nativeを業務で使うことになったのですが、Macが届くまでUbuntuでReact Nativeの勉強をする必要が出てきたました。そのためwebやモバイル上での勉強環境構築と動作確認を行っていきたいと思います。#前提
nodejsをインストール済み
unixコマンドを扱える
Reactが一通り扱える#環境
nodejs v16.13.0
npm 8.1.0#React Nativeとは
Facebookが開発したクロスプラットフォームのアプリ開発用フレームワーク。Reactでios、android両方書けて嬉しいよねってやつです。Flutterなども人気が出てきていますが、React NativeはReactの知識をベースにして書けるので、webのノウハウをある程度流用できて開発効率が良いのかなと思います。#Expoとは
ReactNativeを使ったアプリケーション開発をサポートしているフレームワークです。windows,macOS,Linux関係なくiOS,AndroidどちらもQRコードを介して実機での動作確認が可能です。またwebでの
アプリのアップデートメッセージを眺めてみた
# はじめに
iPhoneでしばらくアプリのアップデートをしていなかったら、33アプリのアップデートがありました。
アップデートのメッセージを眺めていると、今後の参考になりそうだったので一覧にしてみました。# アップデートメッセージ
* 細かい調整をしました。
* 機能を改修しました。
* 軽微な修正を行いました。
* 軽微な改修を行いました。
* 軽微な不具合を行いました。
* 軽微な不具合を修正しました。
* 軽微な不具合に対応いたしました。
* 不具合を修正しました。
* 不具合な修正を行いました。
* いくつかの改良や修正をしました。
* 操作性の向上とバグの修正
* UI改善、軽微なバグの改修を行いました。
* バグの修正や安定性の向上などさまざまな改善を行いました。
* 一部不具合の修正とパフォーマンスの改善を行いました。
* 最新バージョンでは各種不具合が修正され、パフォーマンスも向上しています。
* アプリがクラッシュする問題が修正され、機能の読み込み速度が改善されました。
* このアップデートには、操作性および安定性の改善が含まれます。「軽微な」って結構いいか
[iOS]Xcode13・iOS15・Storyboardから設定したUIButtonに設定した画像がうまく設定されない。
Xcode13でStoryboardからUIButtonを設定すると、iOS15からの`UIButton.Configuration` (https://developer.apple.com/documentation/uikit/uibutton/configuration )= plain, filled, gray, tintedの4つのうちのplainが最初から設定された状態になり、iOS14以前のUIButtonと違う感じになる。
従来と同じ感じで使いたい場合は、Attributes Inspector > UIButton > Style > Default に設定すると、元に戻る。
意図せずplain設定になっており、設定した画像や文字が想定と違って表示されてしまい、少し混乱してしまった。
[Swift] Combine の flatMap で failure になると、以降は値が流れなくなる問題に対処する
# 初めに
タイトル通りですが、`Combine`の`flatMap`で行う処理が、一度でも`failure`になると、それ以降は値が流れなくなるという困った挙動があります。
かなり前から`Swift Forums`とかでも上がっていますが、現在もなお直っていません。
https://forums.swift.org/t/combine-flatmap-can-result-in-values-after-failure-bug/27834
ということで、色々と対応方法を調べたので掲載しておきます。
## 前提
実装に先立ち、まずは問題の発生したコード例で紹介します。
### 1. Combine を使ったネットワークコード例
`Combine`を用いて、以下のような簡単な API クライアントとレスポンス例を用意しました。
“`.swift
final class Repository: NSObject {static func fetch() -> AnyPublisher
{
URLSessio
【?炎上、解消。】荒れたコメントや記事を見たくない人のためのアプリとその仕組み
#はじめに
**技術的な内容のみをご覧になりたい方は[こちら](#技術的なポイント)からどうぞ**
ポエム的な内容は一応[こちらのnote]()に載せてます。[](https://tokiwaproject.page.link/mute)
[以前の記事](https://qiita.com/KokumaruGarasu/items/3ca4c0c7f8bc83b28645)でも紹介したアプリ「ミュート」に**Yahooニュースなど各種サイトでのコメント欄非表示**の機能を追加しました。コメントでの誹謗中傷は話題になっていたのでそれに対応した形になります。今回はその詳細と、以前の記事で伝えきれていなかった部分をご紹介したいと思います。
**ダウンロードはこちらから**
https://tokiwaproject.page.
[SwiftUI]ScrollViewの副作用を抑制する
## 0. 概要
SwiftUIのScrollViewには副作用があり、ビューの配置の仕方によって周囲のビューの動作が決定します。
例えば、次のようなコードはScrollViewの中のTextのみならずNaviagtionのタイトルも連動してスクロールするようになります。“`swift
struct ContentView: View {
var body: some View {
NavigationView {
ScrollView {
Text(“view”)
}
.navigationTitle(“Title”)
.navigationBarTitleDisplayMode(.large)
}
}
}
“`![Simulator Screen Recording – iPhone 13 mini – 2021-11-21 at 16.54.13.gif](https://qiita-im
SwiftUIでUIKitのビューの装飾をするためにUIAppearanceを使うのは間違っている
SwiftUIはツールバーの背景色を変えることができません。
この問題に対応するために、`UIAppearance `を利用する記事が散見されます。
実際、次のようなコードを書くことでTabViewの背景色を変えることができます。“`swift
struct ContentView: View {
var body: some View {
NavigationView {
Text(“button”)
.toolbar {
ToolbarItem(placement: .bottomBar){
Text(“Item”)
}
}
}
.onAppear {
UIToolbar.appearance().backgroundColor = UIColor.blue
}
}
}
“`![CleanSho
iOSアプリでFirebaseによるGoogleサインインの実装方法(初心者向け)
# 記事作成のきっかけ
新たに作成したiOSアプリにFirebaseによるGoogleサインインの実装をするにあたり、以前作成していたiOSのアプリで実装していた内容をそのまま移行しようとしたがうまくいかず、あらためて[Firebaseのドキュメント](https://firebase.google.com/docs/auth/ios/google-signin?authuser=0#swift_5)に基づいて実装をすることにしました。
ドキュメントを見てもよくわからないという方が対象です。正しく実装するにはドキュメントを参照いただくのが最も正しいやり方となります。エラーハンドリングはかなり割愛しています。ご注意ください?
以前参照した記事の通りに実装しているつもりが、エラーメッセージが出力される状態でした。
Firebaseのドキュメント通りに実装している記事が見当たらなかったためこちらに投稿することにしました。
どなたかのお役に立てれば幸いです。## 実装手順
1.Firebaseにプロジェクトを作成する。
2.Xcodeで新たなプロジェクトを作成する。
3.Goog
【Swift】仕様変更が怖くなくなるif文の書き方 〜 enumを使ってSwiftらしく書く 〜
今回は、enum型を使ってSwiftらしいif文の書き方を記事にしてみました。
## この記事で学べること
– いつものif文をenumを利用してSwiftらしくスマートに書く方法
– 仕様変更に強いif文の書き方## サンプルコード
### 仕様
今回はサンプルとして、APIなどの外部リソースから都道府県の文字列を取得したと仮定します。
その上で、都道府県が`”Tokyo”`or`”Osaka”`の場合とそれ以外の都道府県で処理を分岐したいという仕様にします。### enumを一切使わないif文の場合
“`swift
if city == “Tokyo” || city == “Osaka” {
print(“特定の都市が入力されました”)
} else {
print(“特定の都市以外が入力されました”)
}
“`この書き方でも処理的な問題はないが、この書き方で書かれているコードがプロジェクトに複数箇所あると、
`「都道府県名を大文字に変更してください」`
という仕様変更が発生した場合、該当箇所を全部修正する必要があります。
その過程でプログラマー