トラブルシューティング
既知の問題
添付ファイルフローのためのカメラのアクセス許可
SDK Xの会話の添付ファイル機能では、添付ファイルメニューが開きます。これはSafariのネイティブメニューであり、現時点で3つのオプションがありますが、そのうちの一つが「写真またはビデオを撮る」です。このオプションを使用するには、Unityで生成されたアプリのXcodeプロジェクトのInfo.plistファイルでカメラのアクセス許可を宣言する必要があります。宣言せずにユーザーがこのオプションを選択してしまうと、アプリがクラッシュする可能性があります。現時点では、このオプションを非表示にすることはできません。このオプションを無効にする機能については、今後ロードマップに追加される予定です。
このクラッシュを回避するには、XcodeプロジェクトのInfo.plistファイルに以下のキーを追加する必要があります。
NSPhotoLibraryUsageDescription
NSCameraUsageDescription
ユーザーに添付ファイルの送信を要求しないユースケースの場合には、管理者ダッシュボードのアプリの設定ページでユーザーの添付ファイルの構成を無効にする必要があります。これにより会話で添付ファイルアイコンが完全に非表示となるため、上記のアクセス許可をInfo.plistファイルに追加する必要がなくなります。ユーザー側の添付ファイルの構成を無効にすると同時に、エージェント側の添付ファイルの要求機能も使用しないようにしてください。
添付ファイル機能: 次の機能により、ユーザーは会話の中で添付ファイルを送信することができます — 返信ボックスの添付ファイルアイコンと、エージェントによる添付ファイルの要求メッセージ。
App Storeへのアプリの提出時に見つかったサポートされていないアーキテクチャ
Unityがxcframeworkパッケージをサポートしていないため、弊社ではframeworkパッケージでSDKを配布しています。そのため、アーカイブの作成時に有効でないアーキテクチャ(x86_64およびi386)を取り除く必要があります。これを行うには、HS Strip Simulator Slicesという名前のスクリプト実行フェーズを追加します。strip_frameworks.shスクリプトを実行し、有効でないアーキテクチャ(x86_64およびi386)を削除しながらアーカイブを作成します。
ここでアプリをApp Storeに提出する際に、「Unsupported Architectures. The executable for XYZ.app/Frameworks/HelpshiftX.framework contains unsupported architectures '[x86_64/i386]'(サポートされていないアーキテクチャです。XYZ.app/Frameworks/HelpshiftX.frameworkの実行ファイルには、サポートされていないアーキテクチャ"[x86_64/i386]"が含まれています。)」のようなエラーに遭遇する可能性があります。これはおそらく、strip_frameworks.shが実行されなかったか、正常に実行されなかったことを意味しています。
最初に、
strip_frameworks.shに実行権限があることを確認します。このスクリプトを見つけるには、XcodeプロジェクトがUnityから作成されたディレクトリへと移動します。そのディレクトリのパスFrameworks/Plugins/iOS/HelpshiftX.framework/の下に、スクリプトがあります。コマンドchmod +x strip_framework.shを実行することで、実行権限を付与することができます。プロジェクトをアーカイブし、もう一度確認してください。問題が解決していない場合には、次のステップに進んでください。strip_frameworks.shの内容を、以下のように置き換えます。
################################################################################
#
# Copyright 2015 Realm Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
################################################################################
# This script strips all non-valid architectures from dynamic libraries in
# the application's `Frameworks` directory.
#
# The following environment variables are required:
#
# BUILT_PRODUCTS_DIR
# FRAMEWORKS_FOLDER_PATH
# EXPANDED_CODE_SIGN_IDENTITY
# Signs a framework with the provided identity
code_sign() {
# Use the current code_sign_identitiy
echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements $1"
/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1"
}
# Set working directory to product’s embedded frameworks
cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
if [ "$ACTION" = "install" ]; then
echo "Copy .bcsymbolmap files to .xcarchive"
find . -name '*.bcsymbolmap' -type f -exec mv {} "${CONFIGURATION_BUILD_DIR}" \;
else
# Delete *.bcsymbolmap files from framework bundle unless archiving
find . -name '*.bcsymbolmap' -type f -exec rm -rf "{}" +\;
fi
echo "Stripping frameworks"
declare -a INVALID_ARCHS=("x86_64" "i386")
echo "Invalid archs: ${INVALID_ARCHS[@]}"
for file in $(find . -type f); do
# Skip non-dynamic libraries
if ! [[ "$(file "$file")" == *"dynamically linked shared library"* ]]; then
continue
fi
# Get architectures for current file
archs="$(lipo -info "${file}" | rev | cut -d ':' -f1 | rev)"
stripped=""
for arch in $archs; do
if [[ "(${INVALID_ARCHS[@]})" == *"$arch"* ]]; then
# Strip non-valid architectures in-place
lipo -remove "$arch" -output "$file" "$file" || exit 1
stripped="$stripped $arch"
fi
done
if [[ "$stripped" != "" ]]; then
echo "Stripped $file of architectures:$stripped"
if [ "${CODE_SIGNING_REQUIRED}" == "YES" ]; then
code_sign "${file}"
fi
fi
done
プロジェクトをアーカイブし、もう一度ご確認ください。上手くいっていれば、これで問題が解決しているはずです。Helpshift unitypackageのスクリプトには、近日中に上記のアップデートを追加する予定です。
Callアクションカードを使用する際のuserClickOnActionデリゲートの問題
iOS 13のユーザーは、HelpshiftインターフェースでCallアクションカードをクリックした際にuserClickOnActionデリゲートがトリガーされない問題が発生する可能性があります。これにより、アプリケーションはアクションの種類や関連する電話番号などの期待されるデータを受け取ることができなくなります。統合やデリゲートのセットアップが正しいにもかかわらずHelpshift SDKがiOS 13デバイス上で期待通りに動作せず、ユーザー体験の中断が引き起こされる可能性があります。iOS 13をご利用のユーザーは、Callアクションカードに関連する機能に制限が生じる可能性があります。
iOS 18におけるプッシュ通知関連の問題
- iOS 18.0では、アプリ内通知のアニメーション表示に不具合が見られるようです。この問題は、iOS 18.1で修正されています。
- iOS 18を使用しているユーザーに対しては、一部のプッシュ通知が届かない場合があります。
HelpshiftXにdSYMを使用する
なぜdSYMが必要なのですか?
- Xcode 16の警告: HelpshiftX dSYMファイルを含めずにアプリをアップロードすると、Xcode 16は警告を表示します。
- クラッシュのシンボル化: dSYMファイルは、Xcodeや外部のクラッシュレポートツールでのデバッグやクラッシュレポートのシンボル化に不可欠です。
HelpshiftX dSYMを含める手順
1. dSYMファイルを抽出する
- 提供されたzipファイルの中から
HelpshiftX.framework.dSYMファイルを探します。 Assets/Helpshift/Editor/HelpshiftPostProcess.csに移動します。- 関連するスクリプトセクションのコメントを外します。
/* [REMOVE COMMENTED TO INCLUDE HELPSHIFTX DSYMS]
// Check if the Run Script phase is already added
if (!project.isShellScriptAdded(unityAppTargetGuid, "HS Copy dSYM File"))
{
// Define the script name and path for your custom dSYM copying
string scriptCommand = @"
FRAMEWORK_NAME=""HelpshiftX""
FRAMEWORK_DSYM_PATH=""<ABSOLUTE_PATH_TO_THE_DSYM>""
APP_DSYM_PATH=""${DWARF_DSYM_FOLDER_PATH}""
if [ -d ""${FRAMEWORK_DSYM_PATH}"" ]; then
cp -R ""${FRAMEWORK_DSYM_PATH}"" ""${APP_DSYM_PATH}""
else
echo ""⚠️ No dSYM found at ${FRAMEWORK_DSYM_PATH}""
fi
";
// Add the Run Script phase to copy dSYM if not already added
project.AddShellScriptBuildPhase(unityAppTargetGuid,
"HS Copy dSYM File",
"/bin/sh",
scriptCommand);
}
[REMOVE] */
- 抽出したdSYMファイルの絶対パスを更新します。
FRAMEWORK_DSYM_PATH="<ABSOLUTE_PATH_TO_THE_DSYM>"
- このスクリプトは、Xcodeのビルド処理中にHelpshiftX.framework.dSYMをアプリのdSYMsフォルダーへと自動的にコピーします。