libxslt.dylib を含めると、アプリが拒否される理由になると聞きました。それがどれほど正確かはわかりません。
それにもかかわらず、libxslt の最新バージョンを含めたいと思います。将来的には、libxml2 や他のライブラリでも同じことをしたいと考えています。
このようなコード ライブラリをアプリに含める正しい方法は何ですか?
Apple から次のメッセージが表示され、アプリが拒否されました。
XYZ アプリは、非公開または文書化されていない API を使用しているため、App Store に投稿できません:
プライベート シンボル参照 xsltApplyStylesheet xsltCleanupGlobals xsltFreeStylesheet xsltInit xsltParseStylesheetFile xsltSaveResultToString
ご存知のように、iPhone Developer Program License Agreement セクション 3.3.1 で概説されているように、非公開 API の使用は許可されていません。アプリ レビュー チームがアプリケーションをレビューする前に、この問題を解決し、新しいバイナリを iTunes Connect にアップロードしてください。
libxslt および libxml2 ライブラリが実際にデバイスに存在し、Xcode のプルダウン メニューから利用できることを理解していました。これら 2 つのライブラリとリンクを動的にリンクすると、アプリはデバイス上で美しく動作します。したがって、ライブラリはデバイス上にある必要があります。これらのライブラリを静的ライブラリとしてゼロから構築し、アプリのサイズを大きくする必要があるのはなぜですか?
xml と xslt を使用しないことを除けば、これを回避する明確な方法が見つかりません。それはまったく意味がありません!
Hilton さん、xslt を使用するアプリを iTunes に提出することに成功しましたか?
私は最終的にlibxsltをXcodeでビルドし、アプリにリンクし、アプリストアのrejectionbotを回避しました。
基本的に、libxslt を静的にビルドし、シンボル名を変更して、Apple が探すものと一致しないようにする必要があります。すべての記号xsltFoo()
を に変更する必要がありますzsltFoo()
。また、ライブラリ自体の名前を からlibxslt.a
に変更する必要がありますlibzslt.a
。
10の簡単なステップでそれを行う方法は次のとおりです:)
libxslt
サブディレクトリを作成し、そこに配置libxslt-1.1.26.tar.gz
します。libxslt
構成され、ビルドされ、インストールされますlibxslt/dist
libxslt/dist/lib/libzslt.a
libxslt/dist/include
#include <libxslt/whatever.h>
通常、必要に応じてコードに追加しますzsltFoo
のあらゆる場所の代わりに使用xsltFoo
libxslt
手順 3 で参照したビルド スクリプトは次のとおりです。
#!/bin/sh
# Setup
LIBXSLT_VERSION="1.1.26"
LIBXSLT_SHA1_CHECKSUM="69f74df8228b504a87e2b257c2d5238281c65154"
GCC_VERSION="4.2.1"
ARCH="arm-apple-darwin10"
# Bail on any error
set -e
# Function that patches a file using sed(1).
# First argument is filename, subsequent arguments are passed to sed(1).
sed_patch_file()
{
FILE="${1}"
shift
sed ${1+"$@"} < "${FILE}" > "${FILE}".new
if ! diff -q "${FILE}" "${FILE}".new >/dev/null; then
cat "${FILE}".new > "${FILE}"
fi
rm "${FILE}".new
}
# Function that displays the command and then executes it
show_cmd()
{
echo ${1+"$@"}
${1+"$@"}
}
# Dump environment variables
#echo '***************************************************'
#env | sort
#echo '***************************************************'
# Files
SRCBALL="${SOURCE_ROOT}/libxslt/libxslt-${LIBXSLT_VERSION}.tar.gz"
SRCDIR="${SOURCE_ROOT}/libxslt/libxslt-${LIBXSLT_VERSION}"
DISTDIR="${SOURCE_ROOT}/libxslt/dist"
# Verify source is installed
if ! [ -f "${SRCBALL}" ]; then
echo "ERROR: please download and install ${SRCBALL}" 2>&1
echo "The SHA1 checksum should be: ${LIBXSLT_SHA1_CHECKSUM}" 2>&1
exit 1
fi
# Unpack the archive if necessary
if ! [ -e "${SRCDIR}" ]; then
# Unpack archive
echo "*** Unpacking archive ${SRCBALL}"
tar zxf "${SRCBALL}" -C libxslt
# Rename all symbols xsltFoobar -> zsltFoobar to avoid broken app store link analyzer
echo "*** Changing symbol names"
find libxslt/libxslt-"${LIBXSLT_VERSION}" -name '*.[ch]' -print | while read FILE; do
sed_patch_file "${FILE}" -E 's%([^[:alnum:]_/"]|^)xslt([A-Z])%\1zslt\2%g'
done
# Disable build of xsltproc which fails to link
sed_patch_file libxslt/libxslt-"${LIBXSLT_VERSION}"/Makefile.in -E '/^[[:space:]]xsltproc \\$/d'
fi
# Build and install
if ! [ -e "${DISTDIR}" ]; then
# Set up autoconf environment variables
export CPP="${PLATFORM_DEVELOPER_BIN_DIR}/${ARCH}-gcc-${GCC_VERSION} -E"
export CC="${PLATFORM_DEVELOPER_BIN_DIR}/${ARCH}-gcc-${GCC_VERSION}"
export CXX="${PLATFORM_DEVELOPER_BIN_DIR}/${ARCH}-g++-${GCC_VERSION}"
export CPPFLAGS="-I${SDKROOT}/usr/lib/gcc/${ARCH}/${GCC_VERSION}/include -I${SDKROOT}/usr/include"
export LDFLAGS="--sysroot=${SDKROOT}"
export CFLAGS="-Os -pipe ${CPPFLAGS} ${LDFLAGS}"
export CXXFLAGS="${CFLAGS}"
export ARCH
# Configure libxslt
echo "*** Configuring libxslt-${LIBXSLT_VERSION}"
( cd "${SRCDIR}" && show_cmd ./configure \
--prefix="${DISTDIR}" \
--build=i386-apple-darwin10 \
--host="${ARCH}" \
--enable-static \
--disable-shared \
--with-libxml-include-prefix="${SDKROOT}"/usr/include \
--with-libxml-libs-prefix="${SDKROOT}"/usr/lib \
--without-python )
# Build it
echo "*** Building libxslt-${LIBXSLT_VERSION}"
( cd "${SRCDIR}" && show_cmd make )
# Install it
echo "*** Installing libxslt-${LIBXSLT_VERSION}"
( cd "${SRCDIR}" && show_cmd make install )
# Change library name to avoid dynamic linking to the iPhone's shared libxslt library
ln libxslt/dist/lib/lib{x,z}slt.a
fi
Hilton さん、もしよろしければ、LIBXSLT ライブラリをアプリに静的にリンクする方法を教えていただけないでしょうか?
私は他の多くの人とまったく同じ問題を抱えていますが、少なくとも現時点では、動的ライブラリを静的ライブラリに変える方法がわかりません。
ありがとう。
編集: iPhoneでこのバージョンのXSLTをチェックしてください
私のアプリは LibXSLT の使用が拒否されたため、代わりに手動でソース コードを追加し、そのようにしました。私のアプリは数日前に承認されました。
デバイスに既に存在するライブラリにのみ動的にリンクできます。
デバイスに存在しない外部ライブラリにリンクする場合は、自分で静的ライブラリにコンパイルし、代わりにそれをリンクする必要があります。