iOS17で自分の声を作ってみました

この秋にリリースされる予定の iOS17では、Personal Voiceという新機能が搭載されています。 自分の声をiPhone に学習させ、どんな文章でも自分の声で読んでもらうことができる機能です。 Personal Voiceの作り方 まず、iOS17のiPhoneで、言語設定を英語にし…

ハイラルの座標系(ネタバレなし)

ゼルダの伝説、ティアーズオブキングダム、一昨日発売されてさっそくはまっています。今作から導入された座標系について、ネタバレなしです。 座標の意味 マップの画面の右下に3個の数字がありますね。 1個目がx位置、2個目がy位置、3個目がz位置を表し…

Matplotのグラフにフォントを指定する

Matplotを使ってグラフを描いた場合、環境によって文字が表示されないことがあります。 そんな時には、好きなフォントを設定してみましょう。 フォントを指定しない場合 まずは普通にsinグラフを描いてみましょう。 import numpy as np import matplotlib.py…

Custom UIContentConfiguration で楽にCell 管理

iOS14から使えるようになった、 UIContentConfiguration 、便利ですよね。 CollectionViewCellを作らずにCollectionViewを使えます。 UICollectionViewListCell のdefaultContentConfiguration まずは、 UICollectionViewListCell の、 defaultContentConfig…

UIView で Property Wrapper を導入する

UIViewでもこっそり Property Wrapperが使えるようになっていました。 (なお、iOS15からです。) UIViewの表示の更新 今まで、UIViewの見た目を変更するには、View自体を作り直すか、Viewの更新処理を手動でよんだり(setNeedsDisplay)していました。 iOS15…

夜中にjsonのデコードで泣かないために

夜中にコーディングしていて、サーバーAPIから取得したjsonデコードに失敗したんだけど、もう疲れていて詳しく調べるのがめんどくさいことってありませんか? そんな時にはDecodingErrorをみてみましょう。 jsonデコードのエラー iOSの標準のjson decoderはJ…

Async 、 Task 、そして MainActor

async/await使ってみましたか? コードがすっきり書けるようになって、とても便利ですよね。 必要な情報だけチェックしてすぐ動かして確認したい方向けに、ざっくりした情報を書いてみました。 すぐ使えるSwift Concurrency!なので、とりあえず書いてみてく…

URLSession で http header 情報を確認する

たまに、APIの結果を処理するときに、MIME Typeを見てから確認したいってことはありませんか? 基本的にはjsonが返るAPIだけど、エラー時にはhtmlになるのでjsonかhtmlか判別してから処理をしたいとか。 そんなときにはURLResponseを見てみましょう。 API He…

UnManaged な CFString

いつも自分で書くコードはすっかりSwiftですが、システムライブラリはまだまだObjective-Cのこともあります。 ObjCのライブラリが返してくれる CFString をSwiftの String にするメモ。 基本的には、CFString はそのままConvertできます。 var str1: CFStrin…

PlaygroundSupportでAR

前回のこちらの記事でSceneKitのビューをPlaygroundで表示する方法について書きましたが、Playgroundは通常のView表示だけでなく、ARもサポートしています。 PlaygroundSupportでSceneKitの画面を表示する - Toyship.org iPadだけでARができるのはハードルも…

PlaygroundSupportでSceneKitの画面を表示する

みなさん、Xcodeのプレビュー機能は使いこなしていますか? 私の環境では、プレビュー画面が表示されないことが時々あります。 作業しながらSafariのタブを数百ページくらい開いていることもあるので、メモリー不足だとはおもうんですが。 Xcodeを再起動した…

君はAppClipを見たか

iOS14の新機能、AppClip。なんかあのにゅっとでてくるやつです。 対応しているアプリをあまり見かけないので実装してみました。 是非、実際の端末で動かしてみてください。 実装 どうやって実装するのかの情報はWWDCでもでていましたが、どんなタイミングで…

iOSDC 2020に参加しました

今年も 9/19 から 9/21 に開催されたiOSDC 2020に参加しました。 Synchronized iPhones, Again! 今年はこちらの内容で発表させていただきました。 複数のiPhone端末を連携させて動かすためにはどんな実装ですすめていけばいいのかというお話をデモをまじえて…

Combine 最初の一歩

WWDC2019で紹介されたCombineはSwiftで使えるasync frameworkです。 iOS13以上でしか使えないのでプロダクツに導入するのをためらっていましたが、そろそろ導入できそうですね。 まだCombineを導入していない方向けに、Combineの簡単な使い方を書いてみまし…

Pure SwiftUI App Life Cycle

去年のWWDC2019で発表されたSwiftUI。 待望の Swift製のUIライブラリでしたが、実際のところはUIHostingController上に新しいSwiftUIのViewをのせる方式で、過去互換性を守っていました。 そうするしかないだろうとは思ってたんですけど、中途半端さにすっき…

NearbyInteractionで周囲の端末の位置を測定する

NearbyInteractionとはiOS14で導入された新しいフレームワークです。 近距離無線チップを使い、複数の端末の距離や方向を測定することができます。 UWB UWBとは、iPhone 11で導入されていた近距離無線チップです。 何に使われているのかよくわからず、売りに…

SwiftでAudio Queue Recorderを書きました。

ちょっと思い立って、Audio Queueを使ったAudio録音ができるコードをかいてみました。 github.com 基本的にはAppleのだしているhttps://developer.apple.com/library/archive/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/…

ARKit3.5で周囲の物の位置が正確にわかるようになりました。

AppleがARKitを発表してからもう2年以上たちました。 今回 iPad Proの発売にあわせてリリースされたARKit3.5では、また新しい進化がありました。 なにができるようになったのかみていきましょう。 Scene Geometory ARKit3.5では、新しい iPad Proに搭載され…

2018年行ってよかった海外リモートワーク先まとめ

今年は年初のバリに始まって8カ国で海外リモートワークをしました。 バリ(インドネシア)(バリ島で開発合宿 - Toyship.org) ギリシャ(サントリーニ)(サントリーニ島で花粉症退避の開発合宿をしてきました。 - Toyship.org) バンコク フィンランド ス…

サントリーニ島で花粉症退避の開発合宿をしてきました。

今年の3月、サントリーニ島で花粉症退避のための開発合宿をしてきました。 私は花粉症の症状がひどく、3月の中旬には1日にボックスティッシュを一箱使ってしまうくらいの流量になっています。 当然仕事などできるわけもなく、出社してもいつもぼーっとしなが…

サントリーニ島と火山

今年の3月にサントリーニ島に開発合宿に行ってきた(サントリーニ島で花粉症退避の開発合宿をしてきました。 - Toyship.org)んですが、サントリーニ島は、地質学的にみてもとても興味深い島でした。 サントリーニ島の形 サントリーニ島はこんな形をしていま…

サントリーニ島の猫とロバ

今年の3月に、サントリーニ島で花粉回避開発合宿をしてきました。(サントリーニ島で花粉症退避の開発合宿をしてきました。 - Toyship.org) 今年はヨーロッパに何カ国かいったんですが、サントリーニ島は群をぬいて猫の数が多かったです。 塀の上の猫 数が…

わけあって weak self

Closureを使っていたら、ちょっと予想外の動作になってしまっていました。 超・基本的なことですが、動作確認したのでメモ。 closureの循環参照と weak self weak self をなぜ使うかというと、循環参照によるメモリーリークを避けるためですよね。 closureを…

iOSと新しい元号

これはiOSアドベントカレンダーの2日目の記事です。 毎年アドベントカレンダーでは、カレンダーに関係あることを書くことにしています。 今回は来年5月の改元。 iOS始まって以来の改元ですね。 改元前にバグになりそうなポイントを確認しておきましょう。

iOSDC 2018とiOS業界の変化

iOSDC 2018、去年と同じく、今年もスタッフ兼スピーカーで参加しました。 (記事中の写真は、すべてiOSDC写真チームのみなさんの写真です。毎年素敵な写真をありがとう!) 去年のiOSDCも楽しかったんですが、今年はそれをうわまわる充実感でした。 www.toys…

ARKit 2.0 でAR経験を共有できるようになりました。あと、アプリを実装しなくてもARできます。

今朝発表された iOS 12では、ARがいままでになく身近になりました。 実は、わざわざアプリを作らなくてもARを実現できるようになっています。 iOS12でなにができるようになったかみてみましょう。

バリ島で開発合宿

フリーランスエンジニアをはじめて1年半たちました。 お仕事を紹介してくださる方々のおかげに加えて、ますます逼迫してきているモバイルエンジニア不足もあり、そのあいだお仕事が途切れることはありませんでした。 ただ、1週間単位の休暇がとれないと、…

ARKit 1.5で画像認識ができるようになりました。

先日、iOS 11.3のベータがリリースされました。 ARKitがアップデートされて、ARKit1.5となり、画像認識や垂直面の認識などができるようになりました。 (この記事は、公開されている情報に基づいて書いています。) ARKit 1.5 ARKit1.5でのアップデート内容…

はてなブログにひっこしました

このブログは、今までさくらレンタルサーバーのWordpressをで配信していたんですが、はてなブログにひっこしました。 なぜひっこしたのか Wordpressでは、デフォルトではマークダウンを使った編集ができません。 プラグインをいれると、マークダウン編集を含…

Xcode9でのMarkdownレンダリング

Xcode9ではマークダウンファイルはデフォルトではレンダリングされません。レンダリングするためにはどうしたらよいでしょうか。 マークダウンファイルのレンダリング Xcodeのマークダウンファイルでソースコードへのリンクができるときいてやってみようとし…