gpt4 book ai didi

ios - 为 ios 应用程序创建共享库(二进制文件和资源)

转载 作者:行者123 更新时间:2023-11-29 03:23:17 25 4
gpt4 key购买 nike

我想为 iOS 应用程序创建一个共享“库”。这将是一个私有(private)图书馆,即不会分发给其他开发者/公司。我想创建这个库,以便能够在开发过程中明确区分责任/关注点。该库将与 REST 服务交互。它将负责与 REST 服务通信并将响应转换为 objective-c 模型。

最初,该库将用于单个 iPhone 应用程序。但最终,它也可能会用在 iPad 应用程序中。

会有代码和资源。

这个库将依赖于其他框架(例如 sqlite)。

我已经对此进行了大量的谷歌搜索,但我仍然不清楚最好的前进方向是什么。我读过 http://www.cocoanetics.com/2010/04/making-your-own-iphone-frameworks/但这似乎有点矫枉过正,因为我不需要通用应用程序(尽管它不会造成伤害)。

我应该做一个静态库和一个资源包吗?

我正在使用 xcode 5。

最佳答案

我的工作原理..

我的有两个主要目标(除了测试),第一个是常规构建目标,就像在任何其他 Xcode 项目中一样,除了它在构建阶段结束时有这个小脚本

set -e

mkdir -p "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework/Versions/A/Headers"

# Link the "Current" version to "A"
/bin/ln -sfh A "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework/Versions/Current"
/bin/ln -sfh Versions/Current/Headers "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework/Headers"
/bin/ln -sfh "Versions/Current/${PRODUCT_NAME}" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework/${PRODUCT_NAME}"

# The -a ensures that the headers maintain the source modification date so that we don't constantly
# cause propagating rebuilds of files that import these headers.
/bin/cp -a "${TARGET_BUILD_DIR}/${PUBLIC_HEADERS_FOLDER_PATH}/" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework/Versions/A/Headers"

第二个目标是“聚合目标”,这是我实际构建的目标,也是我在项目中创建符号链接(symbolic link)“别名”的“产品”。这个聚合目标将另一个目标设置为依赖项,换句话说,它在构建时强制在另一个目标上构建,然后将 4 种不同的体系结构(模拟器的 i386、ARM7、ARM7s 和 ARM64)一起注入(inject)到一个二进制文件。这是构建脚本..

set -e
set +u
# Avoid recursively calling this script.
if [[ $SF_MASTER_SCRIPT_RUNNING ]]
then
exit 0
fi
set -u
export SF_MASTER_SCRIPT_RUNNING=1

SF_TARGET_NAME=${PROJECT_NAME}
SF_EXECUTABLE_PATH="lib${SF_TARGET_NAME}.a"
SF_WRAPPER_NAME="${SF_TARGET_NAME}.framework"

# The following conditionals come from
# https://github.com/kstenerud/iOS-Universal-Framework

if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]]
then
SF_SDK_PLATFORM=${BASH_REMATCH[1]}
else
echo "Could not find platform name from SDK_NAME: $SDK_NAME"
exit 1
fi

if [[ "$SDK_NAME" =~ ([0-9]+.*$) ]]
then
SF_SDK_VERSION=${BASH_REMATCH[1]}
else
echo "Could not find sdk version from SDK_NAME: $SDK_NAME"
exit 1
fi

if [[ "$SF_SDK_PLATFORM" = "iphoneos" ]]
then
SF_OTHER_PLATFORM=iphonesimulator
else
SF_OTHER_PLATFORM=iphoneos
fi

if [[ "$BUILT_PRODUCTS_DIR" =~ (.*)$SF_SDK_PLATFORM$ ]]
then
SF_OTHER_BUILT_PRODUCTS_DIR="${BASH_REMATCH[1]}${SF_OTHER_PLATFORM}"
else
echo "Could not find platform name from build products directory: $BUILT_PRODUCTS_DIR"
exit 1
fi

# Build the other platform.
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk ${SF_OTHER_PLATFORM}${SF_SDK_VERSION} BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}" $ACTION

# Smash the two static libraries into one fat binary and store it in the .framework
lipo -create "${BUILT_PRODUCTS_DIR}/${SF_EXECUTABLE_PATH}" "${SF_OTHER_BUILT_PRODUCTS_DIR}/${SF_EXECUTABLE_PATH}" -output "${BUILT_PRODUCTS_DIR}/${SF_WRAPPER_NAME}/Versions/A/${SF_TARGET_NAME}"

# Copy the binary to the other architecture folder to have a complete framework in both.
cp -a "${BUILT_PRODUCTS_DIR}/${SF_WRAPPER_NAME}/Versions/A/${SF_TARGET_NAME}" "${SF_OTHER_BUILT_PRODUCTS_DIR}/${SF_WRAPPER_NAME}/Versions/A/${SF_TARGET_NAME}"

关于ios - 为 ios 应用程序创建共享库(二进制文件和资源),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com