noir_neo’s blog

日記と偶にスマホゲームの感想と、重箱の隅をつつくようなUI/UX批評

[WIP] App store review を4週間待っている

24時間でゲーム作るやつ で9月に作った sun-ma というゲームがあります。

これの iOS 版を10月に開発していましたが、審査待ちで未だにリリースできていません。 執筆時点で審査中になってから27日が経過しました。

アクティビティ

f:id:noir_neo:20181116031535p:plain

メタデータ却下

ゲームがシンプルすぎるせいか(?)怪しまれたようでした。

Guideline 2.1 - Information Needed


This type of app has been identified as one that may violate one or more of the following App Store Review Guidelines. Specifically, these types of apps often:

1.1.6 - Include false information, features, or misleading metadata.
2.3.0 - Undergo significant concept changes after approval
2.3.1 - Have hidden or undocumented features, including hidden "switches" that redirect to a gambling or lottery website
3.1.1 - Use payment mechanisms other than in-app purchase to unlock features or functionality in the app
3.2.1 - Do not come from the financial institution performing the loan services
4.3.0 - Are a duplicate of another app or are conspicuously similar to another app
5.2.1 - Were not submitted by the legal entity that owns and is responsible for offering any services provided by the app
5.2.3 - Facilitate illegal file sharing or include the ability to save, convert, or download media from third party sources without explicit authorization from those sources
5.3.4 - Do not have the necessary licensing and permissions for all the locations where the app is used

Before we can continue with our review, please confirm that this app does not violate any of the above guidelines. You may reply to this message in Resolution Center or the App Review Information section in App Store Connect to verify this app’s compliance. 

Given the tendency for apps of this type to violate the aforementioned guidelines, this review will take additional time. If at any time we discover that this app is in violation of these guidelines, the app will be rejected and removed from the App Store, and it may result in the termination of your Apple Developer Program account.

Should you choose to resubmit this app without confirming this app’s compliance, the next submission of this app will still require a longer review time. Additionally, this app will not be eligible for an expedited review until we have received your confirmation.



Since your App Store Connect status is Metadata Rejected, we do NOT require a new binary. To revise the metadata, visit App Store Connect to select your app and revise the desired metadata values. Once you’ve completed all changes, reply to this message in Resolution Center and we will continue the review.

あんまりいろいろ書いても藪蛇だろうということで、シンプルに再確認しましたよと返したところ

Thank you for your reviewing.

I reconfirmed that this app does not violate any guidelines.

すぐに再び審査中になりました。

Hello,

Thank you for providing this information.

We will continue the review, and we will notify you if there are any further issues.

Best regards,

App Store Review

お問い合わせ(1)

審査中になって1週間経った10月27日、いくら時間がかかるとは言われても1週間もなに見るんだと思い、どんだけかかるのかと問い合わせをしました。

(審査待ちに1週間ならまだわかるけど、審査中になってからって…という気持ちです)

Hello,

It has been 7 days since the status of the app has changed to In Review. 
Please inform me how much longer should i wait?

Best regards,

これに対して10月30日に返事がありましたが、内容がない。見積もれない、というテンプレっぽい返答しか来ませんでした。

Hello,

Thank you for contacting App Store Review. We understand that you are concerned about the length of your app review. Therefore, you would like an update.

We can assure you that your app, "sun-ma," has not been forgotten and is proceeding through the review process. There are many factors that contribute to the time required for review, so it’s not possible to estimate when a review will be completed. Each app is unique, so review times will vary.

At this time, you don’t need to do anything else. When your app’s review is complete, you will be notified by email. If you have additional questions or concerns, however, please don’t hesitate to contact us.

Thank you for your patience.

Best regards,

お問い合わせ(2)

11月16日、流石にもう4週間になるぞと再び問い合わせました。 今回はこちらのエントリを参考にほぼそのまま、進捗どうですかしました。

In Review が長いときの催促(督促)方法|iTunesConnectでAppleの審査期間が長くなった場合の問い合わせ - HANAUTA

Dear App Review Team,

It has taken over than 27 days for "In Review", does it be proceeded?
And we would like to know the outcome earlier if possible.

Best regards,

返事待ちです。

株式会社Aimingを退職します

今日から有給消化です。

やっていたこと

早期出社のアルバイトから数えると、3年と3ヶ月勤めました。 ソフトウェアエンジニアという職種です。

Unity

最初の2年ほどは運用タイトルで、ほぼ Unity エンジニアとして機能追加や改修などをしていました。

クライアントの社内勉強会を(多い時で)毎週やったり、クライアントエンジニア間の情報共有の基盤作りにも注力しました。

Rails

この1年ほどは新規開発のプロジェクトで、ゲームのバックエンドを書いてる時間が長く、ほぼ Rails エンジニアでした。

気づけばチーム内では spec 書けおじさんになっていました。

デュアルキーボード

デュアルキーボードと Dvorak 配列に出会い、始めました。

デュアルキーボードのことは開発者ブログに書いたりもしています。

https://developer.aiming-inc.com/misc/dual-keyboard/

インドカレー

インドカレー部に入部し、新宿のインドカレーをたくさん食べました。

一番多く通ったのは、代々木の ruchi というお店です。

退職理由

裁量労働制がなくなる

コアタイムが10時からのフレックスになることが決まりました。

この1年ほど、体調を崩しがちになってからいろいろ試していて、 やはりがんばって朝から働くより昼くらいに出社する方がパフォーマンスを出せることがわかってきたところでの決定でした。

ただし、非同期でゲーム作るのが難しいことも一部認めており、会社の判断として間違っているとは思っていません。音楽性の違いみたいなやつです。

給料が上がらなかった

入社以来半期ごとにコンスタントに上がっていましたが、6月の査定では上がりませんでした。

やることやって、チームの改善の取り組みも頑張っていて、評価も良かったのですが、給与には反映されませんでした。 理由としては退職の機運を隠していなかったのが大きかったようです。

つまりさっさとやめろってことだなと解釈しました。

組織の文化が合わなくなってきた

あんまり詳しく書くと怒られそう。

  • 風通しが悪くなってきた
  • マネジメントへの関心がなかなか高まらない

あたりで自分で変えられる限界を超えていると感じたので、自分が環境を変えることにしました。 良くも悪くも大企業っぽく(イメージです)なってきたな、という感想です。

良かったこと

エンジニアのレベルが高い

新卒入社なのでまだ他の会社を知らない私でもそう感じるほど、技術力が高い会社だと思いました。 クライアントもサーバーも、強い人たちにいろいろ教えてもらってかなり成長できました。

運用と開発からのリリース両方経験できた

スマホゲーム開発のいろんなフェーズを経験できたのはとても良かったです。

立ち上げからみたいなのはできなかったのが少し心残りです。

次何するか

11月いっぱいは有給休暇と無職でお休みします。

この間は、積んでるアニメやゲームの消化と、なんか作りたいものを思う存分に作ったりします。 飲みのお誘いなどは大歓迎です。

次の会社は決まっていますが、入社してからまた書く予定です。 Twitter 転職のこともその時に書いたりします。

ちなみに xR です。

ほしいものリスト

様式美としてほしいものリスト載せておきます。 http://amzn.asia/a3wSYBn

それからねおりん Advent Calendar もよろしくおねがいします。 adventar.org

さいごに

仕事でお世話になった方々、プロジェクトは一緒にできなかったけど勉強会に協力・参加してくれた皆さん、 times でたくさん助言をくださった方、 そしてお疲れ様会を開いてくれたり、飲みに誘ってくれたり、退職祝いをくれた方々に、改めて感謝します。ありがとうございました!

『Unity x ARKit 入門Meetup』で LT しました

こちらのイベントにLT枠で参加しました。

connpass.com

会社に入ってから、社外の勉強会で発表するのはもしかすると初めてかもしれません。

発表したこと

「Multiuser AR Experience を ARKit + Unity で実装する」と題して ARKit を使った共有体験を Unity で実装するにあたってどういう選択肢があるか、というお話をしました。

speakerdeck.com

こちらが発表の中でも紹介した MultipeerConnectivity の Unity 用ラッパーのリポジトリです。ふぁぼください。

github.com

フィードバックなどありましたら、(英語で書くのが億劫だったら日本語の Issue でもいいですし、 Twitter でもいいので!)いただければと思います。

ちなみに同じようなことを Qiita の記事にも書いています。

qiita.com

感想とか

AR の話こんなに濃密にできる時間が私には他にないんで、非常にエモという感じです。 引き続き個人としては AR やっていきの気持ちです。

あと勉強会の懇親会は、話しかけるのが苦手でぼっちになりがちなんですが、登壇しておくと話しかけてもらえるのでお得だなと思いました。 お話してくださった方、名刺交換してくださった方、どうもありがとうございました。

Windows の Unity でビルドした mac app を送るときは zip に気をつける

問題

Windows の Unity で mac ビルドしたとき *.app ディレクトリを直接 zip すると mac で unzip したときに、 Contents ディレクトリがルートになってしまいアプリとして起動できない

送る側は

(試してないけど)

テキトウなディレクトリにネストして zip すれば問題ないはず

(もしくはそういう zip オプションもあった気がする)

もし送られてきたら

要は *.app ディレクトリをつくって中に Contents を放り込めば良い

ただし finder では *.app ディレクトリは作れない(正確には作れるがドラッグアンドドロップできない)ので

ターミナルで

mkdir Hoge.app
cp -R Contents Hoge.app

最後に

Windowsmac ビルドをしないといけない状況はなかなか起きないと思うけど、 いざというとき *.app ディレクトリの特殊さをしらないとハマりそうだなと思ったので記しておく

ゆいゆい*カンパニーにジョインしました

現職は退職していませんが、昨年の12月から ゆいゆい*カンパニー でオタクとして働いています。

f:id:noir_neo:20180419225612j:plain
今日ようやく社員証をもらえました (社員番号は念のため伏せておきます)

入社のきっかけ

社長の小倉唯さんのことは数年前から一方的に知っていたのですが、 声、演技、歌、トーク、ルックス、どれをとっても非常に魅力のある方だなと以前から思っていました。

今回新会社の立ち上げという話を耳にした際に、ぜひ参加したいとこちらから申し出て入社に至りました。

業務内容

現職を続けつつスポットでお手伝いするような働き方をしています。

詳しいことはもちろん守秘義務違反なので書けませんが、

などといった感じです。

これから

小倉唯歴で4年程度、実務経験は1年未満とまだまだ経験が浅いので、まずはできることを増やしていきたいと思っています。 具体的には、 社長 Instagram社長 LINE ブログ へのコメントや前述ラジオへのメールなど、社長へのフィードバック業務が直近で覚えたい仕事です。

さいごに

ところで、武蔵野の森をうっかり2枚チケット取ってしまったのですが、連番希望の方は社内外問わずご連絡ください。

Unity で System.Net.WebSockets を使ったゲームサーバー書こうとしたらうまくいかない

今週ずっと悩んでる。

動機

なんとなくリアルタイムサーバーっていうか、 websocket でクライアントと繋がってるサーバーがどうなってるのかよくわかってなかったので、雑に書いてみたかった。 Unity をリアルタイムサーバーにしたければ、 NetworkManager とか使えばすぐできるのはわかってて、 適当に体験する分には楽かなと思って .Net 4.5 で入ったらしいそれで雑に書いてみたかった。

うまくいかないこと

HttpListener でリクエストを受け取って、ハンドシェイクするところが、どうにも websocket として判定されない。

var httpListener = new HttpListener();
httpListener.Prefixes.Add(uriPrefix);
httpListener.Start();

while (true)
{
    var listenerContext = await httpListener.GetContextAsync();
    if (listenerContext.Request.IsWebSocketRequest) // これが true にならない
    {

全コードは最後に。

windows でも mac でもだめ。 Unity 2017.3 と 2018.1b10 は試した。 参考にした .Net のアプリケーションを実行しても同じだったので、 元のコードが悪そうだけど、どうすればいいのか検討もつかない。

Windows 7 で動かないという情報しか見つからない。久しぶりに"詰んだ"感覚を味わっている。

実装

一応載せておくけど、ほぼ下記のコピペ

WebSocket-Samples/Server.cs at master · paulbatum/WebSocket-Samples · GitHub

サーバー

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.WebSockets;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

public class Server : MonoBehaviour
{
    [SerializeField] private string uriPrefix;

    void Awake()
    {
        StartServer(uriPrefix);
        Log("start.");
    }

    void OnDestroy()
    {
        Parallel.ForEach(_client,p=>
        {
            if (p.State == WebSocketState.Open) p.CloseAsync(WebSocketCloseStatus.NormalClosure, "", System.Threading.CancellationToken.None);
        });
    }

    static readonly List<WebSocket> _client = new List<WebSocket>();

    static async void StartServer(string uriPrefix)
    {
        var httpListener = new HttpListener();
        httpListener.Prefixes.Add(uriPrefix);
        httpListener.Start();

        while (true)
        {
            var listenerContext = await httpListener.GetContextAsync();
            if (listenerContext.Request.IsWebSocketRequest)
            {
                ProcessRequest(listenerContext);
            }
            else
            {
                listenerContext.Response.StatusCode = 400;
                listenerContext.Response.Close();
                Log("Response 400");
            }
        }
    }

    static async void ProcessRequest(HttpListenerContext listenerContext)
    {
        Log($"New Session:{listenerContext.Request.RemoteEndPoint.Address}");

        var ws = (await listenerContext.AcceptWebSocketAsync(null)).WebSocket;
        _client.Add(ws);

        while (ws.State == WebSocketState.Open)
        {
            try
            {
                var buff = new ArraySegment<byte>(new byte[1024]);

                var ret = await ws.ReceiveAsync(buff, System.Threading.CancellationToken.None);

                if (ret.MessageType == WebSocketMessageType.Text)
                {
                    Log($"String Received:{listenerContext.Request.RemoteEndPoint.Address}");
                    Log($"Message={Encoding.UTF8.GetString(buff.Take(ret.Count).ToArray())}");

                    Parallel.ForEach(_client,
                        p => p.SendAsync(new ArraySegment<byte>(buff.Take(ret.Count).ToArray()),
                        WebSocketMessageType.Text,
                        true,
                        System.Threading.CancellationToken.None));
                }
                else if(ret.MessageType == WebSocketMessageType.Close)
                {
                    Log($"Session Close:{listenerContext.Request.RemoteEndPoint.Address}");
                    break;
                }
            }
            catch
            {
                Log($"Session Abort:{listenerContext.Request.RemoteEndPoint.Address}");
                break;
            }
        }

        _client.Remove(ws);
        ws.Dispose();

    }

    private static void Log(object o)
    {
        Debug.Log($"Server: {o}");
    }
}

20171225 - 20171231

水曜日、みのりんのライブに行った。

仕事休んで昼夜通してよかった。 とても元気になった。

茅原実里|Minori with Strings Quartet 〜弦楽四重奏の調べ〜 12月28日より音楽配信スタート! | News | Lantis web site

ずっと聴いてる。


今週はまあまあ趣味のコード書いた。

ジェスチャー取るやつをリファクタリングしていた。

いい感じに書けていてすごく気持ちいい。


仕事はまあなんとか納まった。


金曜、焼肉してバー行って満足度の高い忘年だった。

おいしかった。


土曜、すしがコーヒー豆とお菓子持って来てくれたのでお茶した。

おいしかった。


帰省している。 予定どおりに家を出るのはやはり無理。

家庭環境比較的よくなっていて心は穏やか。

でもまあ本当はオタクコンテンツゆっくり楽しみながら年越ししたいし、 来年とかは正月に一泊とかだけしに来るくらいでいいかなって思ってたりする。。


今週は雑。

よいお年を。