Search code examples
swift3tvos

tvOS - how to retrieve objects from class in topshelf ServiceProvider.swift?


In my tvOS app, I have a class that generates sample data to work with.

import Foundation
import UIKit

class SampleData {

    class func initializeSampleData() -> [Object] {

        var data = [Object]()

        // Cities
        let obj_01 = Object(title: "Dubai",
                            country: "United Arab Emirates",
                            cDescription: "Dubai has positioned itself as a global metropolitan city with its majestic buildings.",
                            image: #imageLiteral(resourceName: "city_dubai"),
                            category: "Cities")

        let obj_02 = Object(title: "Paris",
                            country: "France",
                            cDescription: "The Eiffel Tower is one of the world's more recognizable building landscapes.",
                            image: #imageLiteral(resourceName: "city_paris"),
                            category: "Cities")

        let obj_03 = Object(title: "Tokoyo",
                            country: "Japan",
                            cDescription: "One of the most crowded cities in the world. So many advertisements!",
                            image: #imageLiteral(resourceName: "city_tokoyo"),
                            category: "Cities")

        let obj_04 = Object(title: "Madrid",
                            country: "Spain",
                            cDescription: "One of Europe's oldest cities, Madrid skyscape is beautiful year round.",
                            image: #imageLiteral(resourceName: "city_madrid"),
                            category: "Cities")

        let obj_05 = Object(title: "New York",
                            country: "United States",
                            cDescription: "A view of the Empire State building and its surrounding buildings.",
                            image: #imageLiteral(resourceName: "city_newyork"),
                            category: "Cities")

        // Sports
        let obj_06 = Object(title: "Olypics logo",
                            country: "Brazil",
                            cDescription: "Gotta love watching the Olympics whenever, whereever!",
                            image: #imageLiteral(resourceName: "sports_olympics"),
                            category: "Sports")

        let obj_07 = Object(title: "Rio 2016 Olympics",
                            country: "Brazil",
                            cDescription: "Kicking off the start of the 2016 Olympic games. So much festivities!",
                            image: #imageLiteral(resourceName: "sports_rio2016"),
                            category: "Sports")

        let obj_08 = Object(title: "Rio 2016 Olympics Mascot",
                            country: "Brazil",
                            cDescription: "A wonderful aerial view of Rio De Janeiro behind the crazy mascot on the suspended lift!",
                            image: #imageLiteral(resourceName: "sports_mascot"),
                            category: "Sports")

        let obj_09 = Object(title: "Cycling Atheletes",
                            country: "Brazil",
                            cDescription: "Athletes from around the world come and compete against each other in the Olympic games.",
                            image: #imageLiteral(resourceName: "sports_cycling"),
                            category: "Sports")

        let obj_10 = Object(title: "Runner Athletes",
                            country: "Brazil",
                            cDescription: "Athletes from around the world come and compete against each other in the Olympic games.",
                            image: #imageLiteral(resourceName: "sports_runners"),
                            category: "Sports")

        // Foods
        let obj_11 = Object(title: "Sweets",
                            country: "Italy",
                            cDescription: "Who, tell me who does not love Italian sweets! Drewl.",
                            image: #imageLiteral(resourceName: "foods_sweets"),
                            category: "Foods")

        let obj_12 = Object(title: "Octopus",
                            country: "Italy",
                            cDescription: "A delicasy, and a slimey one at that. It is thought to be a natural aphrodesiac.",
                            image: #imageLiteral(resourceName: "foods_octopus"),
                            category: "Foods")

        let obj_13 = Object(title: "Bolognese Pasta",
                            country: "Italy",
                            cDescription: "Pasta in all its forms originate from Italian kitchens.",
                            image: #imageLiteral(resourceName: "foods_bolognese"),
                            category: "Foods")

        let obj_14 = Object(title: "Bruschetta",
                            country: "Italy",
                            cDescription: "Bruschetta is an antipasto consisting of grilled bread rubbed with garlic and topped with olive oil and salt.",
                            image: #imageLiteral(resourceName: "foods_bruschetta"),
                            category: "Foods")

        let obj_15 = Object(title: "Chocolate Budino",
                            country: "Italy",
                            cDescription: "Warm chocolate budino is a luscious cross between cake and pudding. Yum!",
                            image: #imageLiteral(resourceName: "foods_chocolate_budino"),
                            category: "Foods")


        data.append(obj_01)
        data.append(obj_02)
        data.append(obj_03)
        data.append(obj_04)
        data.append(obj_05)
        data.append(obj_06)
        data.append(obj_07)
        data.append(obj_08)
        data.append(obj_09)
        data.append(obj_10)
        data.append(obj_11)
        data.append(obj_12)
        data.append(obj_13)
        data.append(obj_14)
        data.append(obj_15)

        return data
    }

}

I want to be able to call that same class function to retrieve the same data from inside my topshelf ServiceProvider.swift. When I try the following code, Xcode gives me an "use of unresolved identifier SampleData" :

var topShelfItems: [TVContentItem] {

    let objects = SampleData.initializeSampleData()

    //return []
}

Any help is much appreciated.


Solution

  • When you want to share files between targets (iphone/ipad/tv/watch/other services), click on the file in Xcode, you on the right part of the screen, you will see a "target membership" option. Select whichever target you want your code to be accessible to.

    Now that I have answered my own question, my advice: DO NOT retrieve data to your topshelf the way I was going about it. There is a predefined way of getting data into topshelf. Just download the code sample from Apple here and look at the code: https://developer.apple.com/library/content/samplecode/UICatalogFortvOS/Introduction/Intro.html