ObjC: Add a Xcode project for tvOS.

The CocoaPod (and source) have always support tvOS, but adding the project
makes it easier to run the tests and debug if there ever were an issue.

(not adding a watchOS project at the moment because Apple doesn't provide
 XCTest, so all it could do is build the library. We still support that,
 just can't "test" it.)
This commit is contained in:
Thomas Van Lenten 2019-01-07 16:42:22 -05:00
parent f56adaeb57
commit bd00671b92
9 changed files with 1723 additions and 5 deletions

View File

@ -473,6 +473,12 @@ objectivec_EXTRA_DIST= \
objectivec/ProtocolBuffers_OSX.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings \
objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \
objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \
objectivec/ProtocolBuffers_tvOS.xcodeproj/project.pbxproj \
objectivec/ProtocolBuffers_tvOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata \
objectivec/ProtocolBuffers_tvOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist \
objectivec/ProtocolBuffers_tvOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings \
objectivec/ProtocolBuffers_tvOS.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \
objectivec/ProtocolBuffers_tvOS.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \
objectivec/README.md \
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.pbxproj \
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.xcworkspace/contents.xcworkspacedata \

View File

@ -43,6 +43,8 @@ OPTIONS:
Skip the Xcode Release configuration.
--skip-xcode-osx
Skip the invoke of Xcode to test the runtime on OS X.
--skip-xcode-tvos
Skip the invoke of Xcode to test the runtime on tvOS.
--skip-objc-conformance
Skip the Objective C conformance tests (run on OS X).
--xcode-quiet
@ -82,6 +84,7 @@ REGEN_DESCRIPTORS=no
CORE_ONLY=no
DO_XCODE_IOS_TESTS=yes
DO_XCODE_OSX_TESTS=yes
DO_XCODE_TVOS_TESTS=yes
DO_XCODE_DEBUG=yes
DO_XCODE_RELEASE=yes
DO_OBJC_CONFORMANCE_TESTS=yes
@ -111,6 +114,7 @@ while [[ $# != 0 ]]; do
--skip-xcode )
DO_XCODE_IOS_TESTS=no
DO_XCODE_OSX_TESTS=no
DO_XCODE_TVOS_TESTS=no
;;
--skip-xcode-ios )
DO_XCODE_IOS_TESTS=no
@ -118,6 +122,9 @@ while [[ $# != 0 ]]; do
--skip-xcode-osx )
DO_XCODE_OSX_TESTS=no
;;
--skip-xcode-tvos )
DO_XCODE_TVOS_TESTS=no
;;
--skip-xcode-debug )
DO_XCODE_DEBUG=no
;;
@ -189,6 +196,19 @@ if [[ "${DO_CLEAN}" == "yes" ]] ; then
"${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Release clean
fi
fi
if [[ "${DO_XCODE_TVOS_TESTS}" == "yes" ]] ; then
XCODEBUILD_CLEAN_BASE_OSX=(
xcodebuild
-project objectivec/ProtocolBuffers_tvOS.xcodeproj
-scheme ProtocolBuffers
)
if [[ "${DO_XCODE_DEBUG}" == "yes" ]] ; then
"${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Debug clean
fi
if [[ "${DO_XCODE_RELEASE}" == "yes" ]] ; then
"${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Release clean
fi
fi
fi
if [[ "${REGEN_DESCRIPTORS}" == "yes" ]] ; then
@ -316,6 +336,27 @@ if [[ "${DO_XCODE_OSX_TESTS}" == "yes" ]] ; then
"${XCODEBUILD_TEST_BASE_OSX[@]}" -configuration Release test
fi
fi
if [[ "${DO_XCODE_TVOS_TESTS}" == "yes" ]] ; then
XCODEBUILD_TEST_BASE_TVOS=(
xcodebuild
-project objectivec/ProtocolBuffers_tvOS.xcodeproj
-scheme ProtocolBuffers
# Test on the oldest and current.
-destination "platform=tvOS Simulator,name=Apple TV 1080p,OS=9.0"
-destination "platform=tvOS Simulator,name=Apple TV,OS=latest"
)
if [[ "${XCODE_QUIET}" == "yes" ]] ; then
XCODEBUILD_TEST_BASE_TVOS+=( -quiet )
fi
if [[ "${DO_XCODE_DEBUG}" == "yes" ]] ; then
header "Doing Xcode tvOS build/tests - Debug"
"${XCODEBUILD_TEST_BASE_TVOS[@]}" -configuration Debug test
fi
if [[ "${DO_XCODE_RELEASE}" == "yes" ]] ; then
header "Doing Xcode tvOS build/tests - Release"
"${XCODEBUILD_TEST_BASE_TVOS[@]}" -configuration Release test
fi
fi
if [[ "${DO_OBJC_CONFORMANCE_TESTS}" == "yes" ]] ; then
header "Running ObjC Conformance Tests"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:ProtocolBuffers_tvOS.xcodeproj">
</FileRef>
</Workspace>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
<false/>
</dict>
</plist>

View File

@ -0,0 +1,370 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0930"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7461B52D0F94FAF800A0C422"
BuildableName = "libProtocolBuffers.a"
BlueprintName = "ProtocolBuffers"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8BBEA4A5147C727100C4ADB7"
BuildableName = "UnitTests.xctest"
BlueprintName = "UnitTests"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8BBEA4A5147C727100C4ADB7"
BuildableName = "UnitTests.xctest"
BlueprintName = "UnitTests"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
<SkippedTests>
<Test
Identifier = "CodedInputStreamTests">
</Test>
<Test
Identifier = "CodedOutputStreamTests">
</Test>
<Test
Identifier = "ConcurrencyTests">
</Test>
<Test
Identifier = "DescriptorTests">
</Test>
<Test
Identifier = "GPBAutocreatedArrayTests">
</Test>
<Test
Identifier = "GPBAutocreatedDictionaryTests">
</Test>
<Test
Identifier = "GPBBoolArrayTests">
</Test>
<Test
Identifier = "GPBBoolBoolDictionaryTests">
</Test>
<Test
Identifier = "GPBBoolDoubleDictionaryTests">
</Test>
<Test
Identifier = "GPBBoolFloatDictionaryTests">
</Test>
<Test
Identifier = "GPBBoolInt32DictionaryTests">
</Test>
<Test
Identifier = "GPBBoolInt64DictionaryTests">
</Test>
<Test
Identifier = "GPBBoolObjectDictionaryTests">
</Test>
<Test
Identifier = "GPBBoolUInt32DictionaryTests">
</Test>
<Test
Identifier = "GPBBoolUInt64DictionaryTests">
</Test>
<Test
Identifier = "GPBBridgeTests">
</Test>
<Test
Identifier = "GPBDoubleArrayTests">
</Test>
<Test
Identifier = "GPBEnumArrayCustomTests">
</Test>
<Test
Identifier = "GPBEnumArrayTests">
</Test>
<Test
Identifier = "GPBExtensionRegistryTest">
</Test>
<Test
Identifier = "GPBFloatArrayTests">
</Test>
<Test
Identifier = "GPBInt32ArrayTests">
</Test>
<Test
Identifier = "GPBInt32BoolDictionaryTests">
</Test>
<Test
Identifier = "GPBInt32DoubleDictionaryTests">
</Test>
<Test
Identifier = "GPBInt32EnumDictionaryTests">
</Test>
<Test
Identifier = "GPBInt32EnumDictionaryUnknownEnumTests">
</Test>
<Test
Identifier = "GPBInt32FloatDictionaryTests">
</Test>
<Test
Identifier = "GPBInt32Int32DictionaryTests">
</Test>
<Test
Identifier = "GPBInt32Int64DictionaryTests">
</Test>
<Test
Identifier = "GPBInt32ObjectDictionaryTests">
</Test>
<Test
Identifier = "GPBInt32UInt32DictionaryTests">
</Test>
<Test
Identifier = "GPBInt32UInt64DictionaryTests">
</Test>
<Test
Identifier = "GPBInt64ArrayTests">
</Test>
<Test
Identifier = "GPBInt64BoolDictionaryTests">
</Test>
<Test
Identifier = "GPBInt64DoubleDictionaryTests">
</Test>
<Test
Identifier = "GPBInt64EnumDictionaryTests">
</Test>
<Test
Identifier = "GPBInt64EnumDictionaryUnknownEnumTests">
</Test>
<Test
Identifier = "GPBInt64FloatDictionaryTests">
</Test>
<Test
Identifier = "GPBInt64Int32DictionaryTests">
</Test>
<Test
Identifier = "GPBInt64Int64DictionaryTests">
</Test>
<Test
Identifier = "GPBInt64ObjectDictionaryTests">
</Test>
<Test
Identifier = "GPBInt64UInt32DictionaryTests">
</Test>
<Test
Identifier = "GPBInt64UInt64DictionaryTests">
</Test>
<Test
Identifier = "GPBObjectiveCPlusPlusTests">
</Test>
<Test
Identifier = "GPBStringBoolDictionaryTests">
</Test>
<Test
Identifier = "GPBStringDoubleDictionaryTests">
</Test>
<Test
Identifier = "GPBStringEnumDictionaryTests">
</Test>
<Test
Identifier = "GPBStringEnumDictionaryUnknownEnumTests">
</Test>
<Test
Identifier = "GPBStringFloatDictionaryTests">
</Test>
<Test
Identifier = "GPBStringInt32DictionaryTests">
</Test>
<Test
Identifier = "GPBStringInt64DictionaryTests">
</Test>
<Test
Identifier = "GPBStringUInt32DictionaryTests">
</Test>
<Test
Identifier = "GPBStringUInt64DictionaryTests">
</Test>
<Test
Identifier = "GPBTestCase">
</Test>
<Test
Identifier = "GPBUInt32ArrayTests">
</Test>
<Test
Identifier = "GPBUInt32BoolDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt32DoubleDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt32EnumDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt32EnumDictionaryUnknownEnumTests">
</Test>
<Test
Identifier = "GPBUInt32FloatDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt32Int32DictionaryTests">
</Test>
<Test
Identifier = "GPBUInt32Int64DictionaryTests">
</Test>
<Test
Identifier = "GPBUInt32ObjectDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt32UInt32DictionaryTests">
</Test>
<Test
Identifier = "GPBUInt32UInt64DictionaryTests">
</Test>
<Test
Identifier = "GPBUInt64ArrayTests">
</Test>
<Test
Identifier = "GPBUInt64BoolDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt64DoubleDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt64EnumDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt64EnumDictionaryUnknownEnumTests">
</Test>
<Test
Identifier = "GPBUInt64FloatDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt64Int32DictionaryTests">
</Test>
<Test
Identifier = "GPBUInt64Int64DictionaryTests">
</Test>
<Test
Identifier = "GPBUInt64ObjectDictionaryTests">
</Test>
<Test
Identifier = "GPBUInt64UInt32DictionaryTests">
</Test>
<Test
Identifier = "GPBUInt64UInt64DictionaryTests">
</Test>
<Test
Identifier = "MessageMergeTests">
</Test>
<Test
Identifier = "MessageRuntimeTests">
</Test>
<Test
Identifier = "MessageSerializationTests">
</Test>
<Test
Identifier = "MessageTests">
</Test>
<Test
Identifier = "PerfTests/testHas">
</Test>
<Test
Identifier = "UnknownFieldSetTest">
</Test>
<Test
Identifier = "UtilitiesTests">
</Test>
<Test
Identifier = "WellKnownTypesTest">
</Test>
<Test
Identifier = "WireFormatTests">
</Test>
</SkippedTests>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7461B52D0F94FAF800A0C422"
BuildableName = "libProtocolBuffers.a"
BlueprintName = "ProtocolBuffers"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7461B52D0F94FAF800A0C422"
BuildableName = "libProtocolBuffers.a"
BlueprintName = "ProtocolBuffers"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7461B52D0F94FAF800A0C422"
BuildableName = "libProtocolBuffers.a"
BlueprintName = "ProtocolBuffers"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Release">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0930"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "NO">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7461B52D0F94FAF800A0C422"
BuildableName = "libProtocolBuffers.a"
BlueprintName = "ProtocolBuffers"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "F4487C551A9F8F8100531423"
BuildableName = "libTestSingleSourceBuild.a"
BlueprintName = "TestSingleSourceBuild"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8BBEA4A5147C727100C4ADB7"
BuildableName = "UnitTests.xctest"
BlueprintName = "UnitTests"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
codeCoverageEnabled = "YES"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8BBEA4A5147C727100C4ADB7"
BuildableName = "UnitTests.xctest"
BlueprintName = "UnitTests"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
<SkippedTests>
<Test
Identifier = "PerfTests">
</Test>
</SkippedTests>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7461B52D0F94FAF800A0C422"
BuildableName = "libProtocolBuffers.a"
BlueprintName = "ProtocolBuffers"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7461B52D0F94FAF800A0C422"
BuildableName = "libProtocolBuffers.a"
BlueprintName = "ProtocolBuffers"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7461B52D0F94FAF800A0C422"
BuildableName = "libProtocolBuffers.a"
BlueprintName = "ProtocolBuffers"
ReferencedContainer = "container:ProtocolBuffers_tvOS.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -180,11 +180,8 @@ build_objectivec_ios() {
# Reused the build script that takes care of configuring and ensuring things
# are up to date. The OS X test runs the objc conformance test, so skip it
# here.
# Note: travis has xctool installed, and we've looked at using it in the past
# but it has ended up proving unreliable (bugs), an they are removing build
# support in favor of xcbuild (or just xcodebuild).
objectivec/DevTools/full_mac_build.sh \
--core-only --skip-xcode-osx --skip-objc-conformance "$@"
--core-only --skip-xcode-osx --skip-xcode-tvos --skip-objc-conformance "$@"
}
build_objectivec_ios_debug() {
@ -199,7 +196,23 @@ build_objectivec_osx() {
# Reused the build script that takes care of configuring and ensuring things
# are up to date.
objectivec/DevTools/full_mac_build.sh \
--core-only --skip-xcode-ios
--core-only --skip-xcode-ios --skip-xcode-tvos
}
build_objectivec_tvos() {
# Reused the build script that takes care of configuring and ensuring things
# are up to date. The OS X test runs the objc conformance test, so skip it
# here.
objectivec/DevTools/full_mac_build.sh \
--core-only --skip-xcode-ios --skip-xcode-osx --skip-objc-conformance "$@"
}
build_objectivec_tvos_debug() {
build_objectivec_tvos --skip-xcode-release
}
build_objectivec_tvos_release() {
build_objectivec_tvos --skip-xcode-debug
}
build_objectivec_cocoapods_integration() {
@ -608,6 +621,9 @@ Usage: $0 { cpp |
objectivec_ios_debug |
objectivec_ios_release |
objectivec_osx |
objectivec_tvos |
objectivec_tvos_debug |
objectivec_tvos_release |
objectivec_cocoapods_integration |
python |
python_cpp |