Dbank0208
facebook twitter GitHub
Dbank0208

Metalプログラミング






こんにちは、IOSフリーランスエンジニアの永田です。


相変わらずIOSのアプリ開発をフリーランスで実践しています。
現在は東京駅付近で働いています。
IOSエンジニアは決して多くいません。むしろ少ないようです。
なので仕事には、困らず好きなことを実践できている状態です。
仕事を終えた後も、そう簡単に人が真似できないことをしようと考えて、日夜スキルを磨く行動を実践しています。
オープンソースサイトのGithubで毎日プログラミングソース類を作り、コミット、プッシュする挑戦を始めています。
が、しかし、プログラミングを没頭するあまり、人との交流をおろそかにしてしまっています。
これは良かったり、悪かったり、一概にどっちが良いとは言えませんが、
比率を考えて、人へも還元できればと思うようになりました。
技術を磨きつつ、そのように行動したいと考えておりますので、何卒宜しくお願い致します。

Finderの階層

ios Swift4で Metalを使用したライブラリーを作りました。


Versionは0.3.1です。
永続化機構をFileManagerを使い、実装しました。
構造と、方法を知ってしまえば、具体的な実装はシンプルなのですが、実装をしつつ理解するという部分で少し戸惑いました。
具体的な部分はUIImageをData型、String型として保存するのではなく、UIImageはそのまま保存できるという点です。
UIImageをString型で保存を実施して、FileManagerを読み込む際にUIImageに変換を実施しようしたところ、上手く出来ず少しハマりました。

こちらは作成しているライブラリーです。

MetalReFresh

MetalFileの読み込み


全開の記事で、MetalFileのディレクトリーの場所を解説していましたが、すみません。訂正します。
現状の階層出ないと、キャッシュがクリアーされた際に読み込みが出来ない状態でした。

Finderの階層

FileManagerでの永続化保存


保存を実施している部分です。for文でループを実施している理由は、一つのFileに一つのUIImageデータを保存するためです。
一つにFileに複数のUIImageDataを保存すると、最後に保存したデータのみ表示する形になるからです。
モバイルにディレクトリーを作り、ループすることによりFile名を変更して、File名を複数作成して保存しています。
public func saveMehod(images:[UIImage])
{
fileManager.fileExists(atPath: messageManagement.defaultsPath, isDirectory: &isDir)

if isDir.boolValue {

for i in 0...images.count-1 {

try! fileManager.createDirectory(atPath: messageManagement.defaultsPath ,withIntermediateDirectories: true, attributes: nil)
fileURL.append(URL(fileURLWithPath: messageManagement.defaultsPath).appendingPathComponent(fileNamed+"\(i)"))

imageData.append(UIImagePNGRepresentation(images[i])!)
try! imageData[i].write(to: fileURL[i], options: .atomic)

} } }


FileManagerでの保存データの読み込み


画面起動中にUIimageの画像を表示するタイミングでUserDefaultsでindexのIntの整数を予め保存しています。
画面起動時にUserDefaultsで永続化したIntの整数をループの回数として判定しています。
ループの回数がFileを作成した数になります。
public func readObject()
{
for i in 0...ObjectDefaults().objectSetIndexDefaults()-1 {

fileURL.append(URL(fileURLWithPath: messageManagement.defaultsPath).appendingPathComponent(fileNamed+"\(i)"))

imageData.append(try! Data(contentsOf: fileURL[i],options: NSData.ReadingOptions.mappedIfSafe))

uiImage.append(UIImage(data:imageData[i])!)

guard fileURL[i].path != "" else {

return
}

ImageEntity.imageArray.append(uiImage[i])

}

}




Xcode9でipaファイルの運用
Metalとは違う内容なのですが、アプリをリリースする企業でもテストをする方が開発者の方ではない場合もあり、
Windowsであったり、MacでもXcodeをインストールしていない場合もあります。旧バージョンiTunesを使えば事足りますし、
TestFlightやweb上での運用などの方法もあります。今回の方法は、java側のSDKはMBほどの容量ですし、ターミナル操作で
インストールできるので、一度設定してしまえば簡単になりますので、ご紹介します。
ちなみにJREをインストールした場合はJavaのバージョンはJava9で運用しています。
修正がある場合は、編集して改善していきますのでご了承願います。




Xcode9でipaファイルの運用




AppStore リリースしているアプリの紹介

進捗カメラ

進捗カメラ

こちらは個人として5月にリリースしたアプリケーションで製作期間は約1ヶ月です。
機能は二つのカメラとアルバム機能、画像を他のアプリケーションと共有機能です。
一つ目のカメラは輪郭抽出です。二つ目のカメラは底辺、高さを計測します。
アルバム機能では画面のサイズと角度を計測できます。情報を他のアプリケーションと共有できます。

今後の予定


モバイルパワーと通信パワーが上がるにつれて、3Dプログラミングが増えてくるのはないかと考えています。
次回は、MetalプログラミングのSwiftでの計算式を盛り込んだ研究をしています。
次回も、動かせるMetalプログラミングを解説していきます。




貴重な時間に、お読み下さいましてありがとうございました。