STORES Product Blog

こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。

Swift

XCTestを使ったUIテストの安定化戦略

XCTestを使ったUIテストを安定させるための実践ノウハウを紹介します。 Xcode Cloudを使ってテスト失敗の原因を調査する方法、XCTWaiterやNSPredicateを使った待機処理、キーボードやWebViewなどUI特有の不安定要因の解消までを具体的なコード例とともに解説…

レシートプリンターの印刷が途中で停止する不具合を解消した話

こんにちは! STORES レジ の開発をしている iOS / Android エンジニアの @satoryo056 です。 今回は STORES レジ のレシート印刷で起きた不具合と解消方法についてご紹介します。 そして今回対応した内容について、先日行われた iOSDC Japan 2025 で発表し…

SceneDelegate に移行するには?

STORES ブランドアプリの iOS 版を開発している Megabits です。 UISceneDelegate は iOS 13 で追加され、 6 年が経ちました。最初は iPad でのマルチタスクを管理するためのものでした。同じアプリでも、複数ウィンドウを持つ可能性があるため、シーンで分…

OSSignposterを活用したiOSアプリのパフォーマンス計測

こんにちは、 STORES レジ を開発しているiOSエンジニアの @miichan_ocha です! みなさん、iOSアプリのパフォーマンスを計測していますか? iOSアプリは Xcode Instruments を使ってアプリのさまざまな状態を計測できます。その中でも、パフォーマンス計測…

multi-xcodeproj + xcworkspace 構成移行の実践

multi-xcodeproj + xcworkspace 構成移行の実践 はじめに xcodeproj とは? xcworkspace とは? この記事で解決すること 背景と課題 STOERS レジ の当初の構成 Build Configuration Stagingで起こっていた問題 Swift Packageの制約 具体的に何が起きるのか?…

iOS アプリからローカルサーバーへ接続する道のり

STORES ブランドアプリの iOS アプリ側を開発している Megabits です。 STORES ブランドアプリはアプリとサーバーの連動で成り立っています。なので、アプリを開発するとき、サーバーへ接続してデバッグすることがほどんどです。逆に、バックエンドを開発す…

STORES レジで遭遇した 12 桁バーコード読み取りの謎

こんにちは、 yu です。前回はインターン生としてブログを書きましたが、今回は内定者アルバイトとしてブログを書いていきます。 STORES レジには、会員バーコードやアイテムのバーコードを読み込むスキャン機能があります。 しかし、そのスキャン機能では 1…

潜在的なデータ競合をなくすための取り組み

こんにちは、STORES 決済 でiOSアプリを開発している @nekowenです。 マルチスレッドプログラミングは難しいと言われますが、その理由の1つとして、データ競合(data race)があります。 データ競合は複数のスレッドが同じ共有データに同時にアクセスし、少な…

モバイルアプリのリリースから振り返る STORES 決済 の 2024年

師走っ!! こちらは STORES Advent Calendar 2024 の 13日目の記事です。 product.st.inc なんだか毎日寒いですね! さて、毎年のように 決済 モバイルアプリのリリースから1年を振り返ってますが 今年もはりきって振り返りますよ。 ということで、こんにち…

Kickstart iOS E2E Testing with POM

この記事はSTORES Advent Calendar 2024の12日目の記事です。 こんにちは、@marcy731 です。 STORES ブランドアプリ のモバイルチームのマネージャー兼iOSエンジニアをしています。 STORES ブランドアプリ とは、オーナーさまごとにオリジナルなブランドアプ…

STORES レジ の長年の負債を宣言的UIのエッセンスを取り入れて改善してみた

POSレジグループで STORES レジ という製品の開発をしている片桐といいます。今年の2月から、POSレジグループにサーバーサイドエンジニアとして参加したのですが、現在はサーバーサイドの開発と並行してアプリの開発にも参加しています1。 STORES レジ は、i…