Digital Measurement iOS Cocoapods Guide: Difference between revisions
From Engineering Client Portal
NickParrucci (talk | contribs) No edit summary |
(Import) |
||
(6 intermediate revisions by one other user not shown) | |||
Line 50: | Line 50: | ||
platform :ios, '14.0' | platform :ios, '14.0' | ||
source 'https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git' | source 'https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git' | ||
source 'https://github.com/CocoaPods/Specs.git' | |||
target 'YourProjectsNameHere' do | target 'YourProjectsNameHere' do | ||
Line 60: | Line 61: | ||
<blockquote>'''Note''': If you migrate from the iOS dynamic framework to the XCFramework, just add -XC suffix for the pod in the podfile. E.g. NielsenAppSDK should be replaced with NielsenAppSDK-XC. The same Github repo is used for both dynamic and XCFramework.</blockquote> | <blockquote>'''Note''': If you migrate from the iOS dynamic framework to the XCFramework, just add -XC suffix for the pod in the podfile. E.g. NielsenAppSDK should be replaced with NielsenAppSDK-XC. The same Github repo is used for both dynamic and XCFramework.</blockquote> | ||
<blockquote>'''Note''': Nielsen AppSDK clients with applications on TVOS platform should take into account that TVOS slices are now part of the same XCFramework with iOS slices, so the XCFramework name is the same for both iOS and TVOS. But the TVOS framework imported in the application still has TVOS in its name. This is needed to reduce the number of changes in the existing apps. The code below should be added into the podfiles for TVOS XCFramework users | <blockquote>'''Note''': Although official CocoaPods source is implicit but once you specify NielsenAppSDK source, then CocoaPods source will need to be included in PodFile if you are using some other third party pods along with NielsenAppSDK. Further details are mentioned here https://guides.cocoapods.org/syntax/podfile.html#source</blockquote> | ||
<blockquote>'''Note on TVOS''': Nielsen AppSDK clients with applications on TVOS platform should take into account that TVOS slices are now part of the same XCFramework with iOS slices, so the XCFramework name is the same for both iOS and TVOS. But the TVOS framework imported in the application still has TVOS in its name. This is needed to reduce the number of changes in the existing apps. The code below should be added into the podfiles for TVOS XCFramework users:</blockquote> | |||
<syntaxhighlight lang=Javascript> | <syntaxhighlight lang=Javascript> | ||
Line 197: | Line 200: | ||
<br> | <br> | ||
--> | --> | ||
== PODFILE NOTE for Developers with Apple Silicon-Based Macs Using Dynamic/Static Frameworks== | |||
If you are building your iOS application on a Mac with Apple Silicon chip (M1/M2, etc), please add the following fix to end of the podfile: | |||
<syntaxhighlight lang=javascript> | |||
post_install do |installer| | |||
installer.pods_project.build_configurations.each do |config| | |||
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" | |||
end | |||
end | |||
</syntaxhighlight> | |||
If you encounter the below error after making above changes... | |||
"ld: framework not found Pods_</br> | |||
clang: error: linker command failed with exit code 1 (use -v to see invocation)" | |||
...you must exclude arm64 simulator architecture from your project - navigate to "Build Settings" of your project and add "Any iOS Simulator SDK" with value arm64 inside "Excluded Architecture". | |||
[[File:Cocoa XC15.png|1000px|center]] | |||
== Execute Install == | == Execute Install == | ||
Line 219: | Line 243: | ||
pod 'NielsenAppSDK-XC','9.0.0.0' | pod 'NielsenAppSDK-XC','9.0.0.0' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<!-- | <!-- | ||
Line 327: | Line 350: | ||
=== Appsdk Suffix Reference === | === Appsdk Suffix Reference === | ||
The Nielsen AppSDK has various configurations per market and distribution type, which can be determined by reviewing the [[Digital Measurement iOS Suffix Guide|sdk suffix]]. The first part will be the SDK version: 3 digits for the major SDK version and 1 digit for the minor SDK version. EG: <code>ai.8.1.0.0_abc</code> | The Nielsen AppSDK has various configurations per market and distribution type, which can be determined by reviewing the [[Digital Measurement iOS Suffix Guide|sdk suffix]]. The first part will be the SDK version: 3 digits for the major SDK version and 1 digit for the minor SDK version. EG: <code>ai.8.1.0.0_abc</code> | ||
=== Pod Cache Cleanup === | |||
If you find any trouble while installing or updating latest Nielsen SDK version then you may need to clean up the pod cache by executing following commands: | |||
<syntaxhighlight lang=Swift> | |||
rm -rf ~/Library/Caches/CocoaPods | |||
rm -rf Pods | |||
rm -rf ~/Library/Developer/Xcode/DerivedData/* | |||
pod deintegrate | |||
pod setup | |||
pod install | |||
</syntaxhighlight> | |||
<br> | |||
=== Xcode 14 Bitcode Changes === | === Xcode 14 Bitcode Changes === | ||
Line 340: | Line 375: | ||
=== Additional Resources === | === Additional Resources === | ||
For more information on [https://guides.cocoapods.org/using/getting-started.html | For more information on [https://guides.cocoapods.org/using/getting-started.html CocoaPods] or How to set up the Profile in the [https://guides.cocoapods.org/using/using-cocoapods.html Using Cocoapods] page. | ||
<br> | <br> | ||
<br> | <br> |
Latest revision as of 23:24, 10 April 2024
How to install Nielsen SDK using CocoaPods
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over 30 thousand libraries and is used in over 1.9 million apps. The Nielsen SDK now uses this distribution framework for improved version management and provides a Static and Dynamic Framework.
Initial Configuration
The Nielsen SDK integration requires Cocoapods.
- The XCFramework which requires Cocoapods Version 1.10.1 or higher.
- The Dynamic Framework which requires Cocoapods Version 1.6.1 or higher.
- The Static Framework requires Cocoapods version 1.4.0. or higher.
The full installation guide for this framework is provided on the Getting Started page, and how to set up the Podfile is mentioned in Using Cocoapods page.
Repository Credentials
The first step is to add the credentials received from Nielsen into your .netrc file.
Starting on Sept 21, 2021 the Nielsen SDK has moved to a public repository. Credentials are no longer required.
Verify version of Cocoapods
First verify that Cocoapods is installed.
pod --version
If it is not, then install.
Install via gem
sudo gem install cocoapods
Install using homebrew
brew install cocoapods
Add Cocoapod repository
XCFramework (Cocoapods 1.10.1+)
If using XCFramework (preferred approach), from the command line, type the following:
pod repo add NielsenAppSDK https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git
Make sure you run the pod init command in your **project's directory.**
pod init
You now need to slightly modify the PodFile that was created in this directory. From the command line, you can use vi or vim to edit.
The following must be in the PodFile:
Podfile
platform :ios, '14.0'
source 'https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git'
source 'https://github.com/CocoaPods/Specs.git'
target 'YourProjectsNameHere' do
use_frameworks!
#Pods for ApplicationTarget
pod 'NielsenAppSDK-XC'
end
Note: If you migrate from the iOS dynamic framework to the XCFramework, just add -XC suffix for the pod in the podfile. E.g. NielsenAppSDK should be replaced with NielsenAppSDK-XC. The same Github repo is used for both dynamic and XCFramework.
Note: Although official CocoaPods source is implicit but once you specify NielsenAppSDK source, then CocoaPods source will need to be included in PodFile if you are using some other third party pods along with NielsenAppSDK. Further details are mentioned here https://guides.cocoapods.org/syntax/podfile.html#source
Note on TVOS: Nielsen AppSDK clients with applications on TVOS platform should take into account that TVOS slices are now part of the same XCFramework with iOS slices, so the XCFramework name is the same for both iOS and TVOS. But the TVOS framework imported in the application still has TVOS in its name. This is needed to reduce the number of changes in the existing apps. The code below should be added into the podfiles for TVOS XCFramework users:
# modify XCFramework configuration files to update NielsenAppApi.framework -> NielsenTVAppApi.framework
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'Pods-NielsenVideoPlayerTVOSPodsXC'
# update Pods-NielsenVideoPlayerTVOSPodsXC.debug.xcconfig file
# update Pods-NielsenVideoPlayerTVOSPodsXC.release.xcconfig file
target.build_configurations.each do |config|
xcconfig_path = config.base_configuration_reference.real_path
puts "post_install: Found #{File.basename(xcconfig_path)}"
xcconfig = File.read(xcconfig_path)
new_xcconfig = xcconfig.sub('-framework "NielsenAppApi"', '-framework "NielsenTVAppApi"')
File.open(xcconfig_path, "w") { |file| file << new_xcconfig }
puts "post_install: Updated #{File.basename(xcconfig_path)} file with a value: NielsenTVAppApi.framework"
end
# update Pods-NielsenVideoPlayerTVOSPodsXC-frameworks.sh file
frameworksh_path = "Pods/Target Support Files/#{target.name}/#{target.name}-frameworks.sh"
if File.exist?(frameworksh_path)
puts "post_install: Found #{File.basename(frameworksh_path)}"
text = File.read(frameworksh_path)
new_contents = text.gsub('NielsenAppApi.framework', 'NielsenTVAppApi.framework')
File.open(frameworksh_path, "w") {|file| file.puts new_contents}
puts "post_install: Updated #{File.basename(frameworksh_path)} file with a value: NielsenTVAppApi.framework"
end
end
end
end
If you migrate from the TVOS dynamic framework to the XCFramework, please note that TVOS slices are now part of the same XCFramework with iOS slices. So in addition to appending of the -XC suffix to the pod name in the podfile please remove TVOS. E.g. the naming for the pod NielsenTVOSAppSDK should be changed to NielsenAppSDK-XC.
Dynamic Framework (Cocoapods 1.6.1+)
Note: We highly recommend to migrate to XCFramework for all our clients.
If using Dynamic Framework, from the command line, type the following:
pod repo add NielsenAppSDK https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git
Make sure you run the pod init command in your **project's directory.**
pod init
You now need to slightly modify the PodFile that was created in this directory. From the command line, you can use vi or vim to edit.
The following must be in the PodFile:
Podfile
platform :ios, '11.0'
source 'https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git'
target 'YourProjectsNameHere' do
use_frameworks!
#Pods for ApplicationTarget
pod 'NielsenAppSDK'
end
Note: If you are building an application on a Mac with Apple M1 chip, please add the following fix to end of the podfile
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
For Static Framework (Cocoapods 1.4+)
From the command line, type the following:
pod repo add NielsenAppSDK https://github.com/nielsendigitalsdk/nielsenappsdk-ios-specs.git
Make sure you run the pod init command in your **project's directory.**
pod init
You now need to slightly modify the PodFile that was created in this directory. From the command line, you can use vi or vim to edit.
The following must be in the PodFile:
Podfile
platform :ios, '11.0'
source 'https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs.git'
target 'YourProjectsNameHere' do
#Pods for ApplicationTarget
pod 'NielsenAppSDK'
end
Note: If you are building an application on a Mac with Apple M1 chip, please add the following fix to end of the podfile
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
NOTE: You can have multiple pods within the Podfile
To select a specific version of the Nielsen SDK, just append the build number. For example, this line is requesting XCFramework build 8.1.0.0:
pod 'NielsenAppSDK-XC','8.1.0.0'
If using version control, a warning message will be displayed within the console trace during the build of your app,
and it will show all sdk versions released to-date, allowing a developer to select a more recent build if desired.
PODFILE NOTE for Developers with Apple Silicon-Based Macs Using Dynamic/Static Frameworks
If you are building your iOS application on a Mac with Apple Silicon chip (M1/M2, etc), please add the following fix to end of the podfile:
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
If you encounter the below error after making above changes...
"ld: framework not found Pods_
clang: error: linker command failed with exit code 1 (use -v to see invocation)"
...you must exclude arm64 simulator architecture from your project - navigate to "Build Settings" of your project and add "Any iOS Simulator SDK" with value arm64 inside "Excluded Architecture".
Execute Install
Once that has been edited, you can now execute the install:
pod install
Cocoapods will automatically create a new file with extension “.xcworkspace”. From this moment, that file should be used for using the target project instead of previous one with extension “.xcodeproj”. Inside of this workspace you will see “Pods” target which will include ready to use NielsenAppApi framework.
Open the file with the extension of .xcworkspace
file using Xcode.
Execute Update
When you want to retrieve latest Nielsen SDK version then please use pod update [Nielsen App Flavor Name]:
pod update NielsenAppSDK-XC
In case if you set specific version of the Nielsen SDK in your PodFile then you'll also need to update that specific version to latest version in your PodFile before executing pod update command:
pod 'NielsenAppSDK-XC','9.0.0.0'
Pod Versions
The following Pod versions are now available: (For 'kids' apps, please use the NoId framework (EG: NielsenNoIdAppSDK-XC).
Note: Nielsen SDK builds for tvOS are no longer distributed as separated packages. XCFramework allows to combine iOS and tvOS platforms in a single package. Please use the corresponding XCFramework while migrating from static or dynamic framework for tvOS. E.g. NielsenTVOSAppSDK -> NielsenAppSDK-XC.
App Flavor Name |
---|
NielsenAppSDK-XC |
NielsenNoAdAppSDK-XC |
NielsenNoIdAppSDK-XC |
We highly recommend to migrate to XCFramework for all our clients. For clients who still have reasons to keep using the old framework packages in the application and do not migrate to XCFramework we distribute "fat" frameworks both static and dynamic for the release 8.1.0.0. Anyway, our plan to stop distributing "fat" frameworks for future releases and to distribute the Nielsen iOS SDK as an XCFramework only.
The following Pod versions are available: (For 'kids' apps, please use the NoId framework (EG: NielsenNoIdAppSDK, NielsenNoIdTVOSAppSDK)
App Flavor Name |
---|
NielsenAppSDK |
NielsenNoAdAppSDK |
NielsenNoAdTVOSAppSDK |
NielsenNoIdAppSDK |
NielsenNoIdTVOSAppSDK |
NielsenTVOSAppSDK |
Regional Builds
(For 'kids' apps, please use the NoId framework (EG: NielsenAGFNoIdAppSDK-XC, NielsenAGFNoIdTVOSAppSDK-XC)
App Flavor Name |
---|
NielsenAGFAppSDK-XC |
NielsenAGFNoAdAppSDK-XC |
NielsenAGFNoIdAppSDK-XC |
Fat frameworks are still available for the release 8.1.0.0.
App Flavor Name |
---|
NielsenAGFAppSDK |
NielsenAGFNoAdAppSDK |
NielsenAGFNoAdTVOSAppSDK |
NielsenAGFNoIdAppSDK |
NielsenAGFNoIdTVOSAppSDK |
NielsenAGFTVOSAppSDK |
Appsdk Suffix Reference
The Nielsen AppSDK has various configurations per market and distribution type, which can be determined by reviewing the sdk suffix. The first part will be the SDK version: 3 digits for the major SDK version and 1 digit for the minor SDK version. EG: ai.8.1.0.0_abc
Pod Cache Cleanup
If you find any trouble while installing or updating latest Nielsen SDK version then you may need to clean up the pod cache by executing following commands:
rm -rf ~/Library/Caches/CocoaPods
rm -rf Pods
rm -rf ~/Library/Developer/Xcode/DerivedData/*
pod deintegrate
pod setup
pod install
Xcode 14 Bitcode Changes
Starting from Xcode 14, bitcode is no longer required for iOS, watchOS and tvOS applications, and the App Store no longer accepts bitcode submissions from Xcode 14. So if bitcode is enabled to Yes then following error may come while integrating through Cocoapods:
"Xcode setting ENABLE_BITCODE: obtain an updated library from the vendor, or disable bitcode for this target"
To Fix: Target -> Build Settings -> Build Options -> set Enable Bitcode to No.
Additional Resources
For more information on CocoaPods or How to set up the Profile in the Using Cocoapods page.