Recently I was adding a Coin Shop with In-App purchase to a couple of my Unity 3D games. I had successfully forward ported these games from Unity 5 to Unity 2019 and I had successfully added my coin shop with In-App purchase and built for macOS and iOS.
But when I tried to build for tvOS I got these errors:
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_SKProductsRequest", referenced from:
objc-class-ref in UnityPurchasing.o
"_OBJC_CLASS_$_SKProductStorePromotionController", referenced from:
objc-class-ref in UnityPurchasing.o
"_OBJC_CLASS_$_SKMutablePayment", referenced from:
objc-class-ref in UnityPurchasing.o
"_OBJC_CLASS_$_SKReceiptRefreshRequest", referenced from:
objc-class-ref in UnityPurchasing.o
"_OBJC_CLASS_$_SKPaymentQueue", referenced from:
objc-class-ref in UnityEarlyTransactionObserver.o
objc-class-ref in UnityPurchasing.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
After a bit of googling it appears that Unity 2019 does not automatically add the StoreKit.framework to the UnityFramework target.
A first I was a bit confused as I had added the StoreKit.framework to the Unity-iPhone target but that is not correct, it must be added to the UnityFramework target.
What you need to do, specifically, is this:
- Show the Project Navigator by clicking the Folder Icon on the top left hand side of Xcode
- Under the Folder Icon, click to select the Unity-iPhone target
- Under PROJECT, under TARGETS, click to select UnityFramework
- Click Build Phases
- Click the disclosure triangle to the left of Link Binary With Libraries
- Click + to Add items
- Click StoreKit.framework
- Click Add
Now you can Archive for tvOS and everything will work just as it did with macOS and iOS.
Here is a picture:

Sigh.