C#

今まで動いていたApp Store Connect APIへのリクエストが急にBad Requestになったときの対処法

blog.kyubuns.dev こんな感じで定期的にAppStoreConnectから売上を取得するC#コードを走らせていたのですが、 なぜかある日突然、400 Bad Requestが帰ってくるようになりました。 ドキュメント等を調べても特に破壊的変更が入った形跡がなく不思議だったので…

GCが発生するIReadOnlyList<T>等のforeachに警告を出すRoslynAnalyzer

C#

IReadOnlyListをforeachで回すとGCが発生するのは周知の事実ですが、 外部にプロパティを公開するならIReadOnlyListやIReadOnlyDictionaryを使いたいし、 そもそも他にもGCが発生するforeachのパターンあるよな・・・と考え出すと、 気軽にforeachも書けない…

ZLinqでString.JoinしたいときはJoinToString

C#

追記:JoinToStringという便利なメソッド実装されてました。これを使いましょう! github.com 以下、「ZLinqとZStringでJoinedBy」というタイトルで公開していた時の残骸。 ExtraLINQにあったJoinedByをZLinq向けに移植。

Unityで files.getUploadURLExternal と files.completeUploadExternal を使ってSlackにファイルをアップロードする

files.uploadが廃止になると聞いたので。

C#で Dictionary<A, List<B>> を IReadOnlyDictionary<A, IReadOnlyList<B>> として公開する

C#

してはいけないこと(Dictionary内の要素を書き換える)は、できないようにするべき。ということで、 こういうコードをよく書く。 public IReadOnlyDictionary<string, IReadOnlyList<int>> PublicDictionary { get; } private readonly Dictionary<string, List<int>> _privateDictionary = new(); public</string,></string,>…

C#からGoogle Play Consoleの売上レポートを取得する

AppStoreはこちら → C#からApp Store Connect APIを叩いて売上レポートを取得する 悩んでググってこの記事に辿り着いた方向けの何の補足もない不親切な記事です。 公式のドキュメント using Google.Apis.Auth.OAuth2; using Google.Cloud.Storage.V1; const …

C#からApp Store Connect APIを叩いて売上レポートを取得する

Google Playはこちら → C#からGoogle Play Consoleの売上レポートを取得する 悩んでググってこの記事に辿り着いた方向けの何の補足もない不親切な記事です。 Pkcs8PrivateBlobとかはWindowsでしか動かないので使ってません。 App Store Connect APIのドキュ…

C#からAndroid(Google Play Console)の実績を登録する

Google Play Consoleでの実績の登録って、実績数 * 言語数の作業が発生するのでとても手作業でやってられません。 ということで、C#からやりましょう。 Google Play Games Services Publishing APIのセットアップ Google Play Games Services Publishing API…

IUniTaskAsyncEnumerableを使って操作の先行入力を実現する

public class Sandbox1 : MonoBehaviour { public void Start() { var channel = Channel.CreateSingleConsumerUnbounded<ICommand>(); SetupWriter(channel.Writer); SetupReader(channel.Reader).Forget(); } private void SetupWriter(ChannelWriter<ICommand> channelWriter)</icommand></icommand>…

特定条件までawaitしつつも毎フレームこれを実行したい!

async/awaitで、特定条件までawaitしつつも毎フレームこれを実行したい!みたいなめっちゃゲームでしか出てこなさそうなことをどう書くと綺麗に書けるか考えている。 とりあえず素直に書くならこう。 var cancellationTokenSource = new CancellationTokenSo…

UnityEditor上でAddressableのAssetを同期的に読む

Testとかのために同期的にAddressableからAssetを読みたい時用。 public static class EditorAddressables { public static AddressableAssetGroup[] GetGroups() { var settings = UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Se…

Unity2020.2でnull許容参照型を使う

null許容参照型って? ドキュメントを読みましょう。 これが欲しかった!最高! Unityで使うには辛さがある SerializeFieldは#nullable enableで囲う。とかは良いとして、 public class Hoge : MonoBehaviour { private HogeComponent _cache; public void S…

MessageBrokerでBaseClassやInterfaceのイベントを受け取る

using System; using Cysharp.Threading.Tasks; using Extensions; using UnityEngine; public class MessageTest : MonoBehaviour { public void Start() => Test().Forget(); private async UniTask Test() { var messageBroker = new TaskMessageBroker()…

TaskMessageBroker

UniRxに入っているAsyncMessageBrokerのTaskバージョン using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; namespace Extensions { public interface ITaskMessagePublisher { UniTask PublishAsync<T>(T message); } public in</t>…

UniTask v2のRCが出たので触ってみた (RC4対応版)

UniTask v2の全機能を紹介してるわけではありません。新機能一覧はReleaseページを追ってください。 RCなので、正式版ではインターフェイスなどもろもろ代わっている可能性があります。 UniTaskのReleaseページから最新版を落として使いましょう。 雑談 Unit…

C#でjstの現在時間を取る

var fixedTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Japan"); var jstNow = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, fixedTimeZone);