Skip to content

Feature/tvos support #443

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Jun 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,12 @@ if(FIREBASE_CPP_BUILD_TESTS)
${CMAKE_BINARY_DIR})
endif()

if (PLATFORM STREQUAL TVOS OR PLATFORM STREQUAL SIMULATOR_TVOS)
# AdMob, FDL are not supported on tvOS.
set(FIREBASE_INCLUDE_ADMOB OFF)
set(FIREBASE_INCLUDE_DYNAMIC_LINKS OFF)
endif()

# Occasionally ANDROID is not being set correctly when invoked by gradle, so
# set it manually if ANDROID_NDK has been defined.
if(DEFINED ANDROID_NDK)
Expand Down
10 changes: 6 additions & 4 deletions admob/src/common/banner_view_internal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@

#if FIREBASE_PLATFORM_ANDROID
#include "admob/src/android/banner_view_internal_android.h"
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
#include "admob/src/ios/banner_view_internal_ios.h"
#else
#include "admob/src/stub/banner_view_internal_stub.h"
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS

namespace firebase {
namespace admob {
Expand All @@ -40,11 +41,12 @@ BannerViewInternal::BannerViewInternal(BannerView* base)
BannerViewInternal* BannerViewInternal::CreateInstance(BannerView* base) {
#if FIREBASE_PLATFORM_ANDROID
return new BannerViewInternalAndroid(base);
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
return new BannerViewInternalIOS(base);
#else
return new BannerViewInternalStub(base);
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS
}

void BannerViewInternal::SetListener(BannerView::Listener* listener) {
Expand Down
10 changes: 6 additions & 4 deletions admob/src/common/interstitial_ad_internal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@

#if FIREBASE_PLATFORM_ANDROID
#include "admob/src/android/interstitial_ad_internal_android.h"
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
#include "admob/src/ios/interstitial_ad_internal_ios.h"
#else
#include "admob/src/stub/interstitial_ad_internal_stub.h"
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS

namespace firebase {
namespace admob {
Expand All @@ -41,11 +42,12 @@ InterstitialAdInternal* InterstitialAdInternal::CreateInstance(
InterstitialAd* base) {
#if FIREBASE_PLATFORM_ANDROID
return new InterstitialAdInternalAndroid(base);
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
return new InterstitialAdInternalIOS(base);
#else
return new InterstitialAdInternalStub(base);
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS
}

void InterstitialAdInternal::SetListener(InterstitialAd::Listener* listener) {
Expand Down
10 changes: 6 additions & 4 deletions admob/src/common/native_express_ad_view_internal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@

#if FIREBASE_PLATFORM_ANDROID
#include "admob/src/android/native_express_ad_view_internal_android.h"
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
#include "admob/src/ios/native_express_ad_view_internal_ios.h"
#else
#include "admob/src/stub/native_express_ad_view_internal_stub.h"
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS

namespace firebase {
namespace admob {
Expand All @@ -44,11 +45,12 @@ NativeExpressAdViewInternal* NativeExpressAdViewInternal::CreateInstance(
NativeExpressAdView* base) {
#if FIREBASE_PLATFORM_ANDROID
return new NativeExpressAdViewInternalAndroid(base);
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
return new NativeExpressAdViewInternalIOS(base);
#else
return new NativeExpressAdViewInternalStub(base);
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS
}

void NativeExpressAdViewInternal::SetListener(
Expand Down
10 changes: 6 additions & 4 deletions admob/src/common/rewarded_video_internal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@

#if FIREBASE_PLATFORM_ANDROID
#include "admob/src/android/rewarded_video_internal_android.h"
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
#include "admob/src/ios/rewarded_video_internal_ios.h"
#else
#include "admob/src/stub/rewarded_video_internal_stub.h"
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS

namespace firebase {
namespace admob {
Expand All @@ -41,11 +42,12 @@ RewardedVideoInternal::RewardedVideoInternal()
RewardedVideoInternal* RewardedVideoInternal::CreateInstance() {
#if FIREBASE_PLATFORM_ANDROID
return new RewardedVideoInternalAndroid();
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
return new RewardedVideoInternalIOS();
#else
return new RewardedVideoInternalStub();
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS
}

void RewardedVideoInternal::SetListener(Listener* listener) {
Expand Down
10 changes: 6 additions & 4 deletions admob/src/include/firebase/admob/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@

#if FIREBASE_PLATFORM_ANDROID
#include <jni.h>
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
extern "C" {
#include <objc/objc.h>
} // extern "C"
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS

namespace firebase {
namespace admob {
Expand All @@ -40,13 +41,14 @@ namespace admob {
#if FIREBASE_PLATFORM_ANDROID
/// An Android Activity from Java.
typedef jobject AdParent;
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
/// A pointer to an iOS UIView.
typedef id AdParent;
#else
/// A void pointer for stub classes.
typedef void *AdParent;
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS,
// FIREBASE_PLATFORM_TVOS

#ifdef INTERNAL_EXPERIMENTAL
// LINT.IfChange
Expand Down
8 changes: 8 additions & 0 deletions app/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ set(app_ios_SRCS
src/invites/ios/invites_receiver_internal_ios.mm
src/invites/ios/invites_ios_startup.mm
src/uuid_ios_darwin.mm)
if (PLATFORM STREQUAL TVOS OR PLATFORM STREQUAL SIMULATOR_TVOS)
# TVOS does not have a web browser and does not support dynamic links.
# Remove these files if we are building for TVOS.
list(REMOVE_ITEM app_ios_SRCS
src/invites/ios/invites_receiver_internal_ios.mm
src/invites/ios/invites_ios_startup.mm)
endif()

set(app_desktop_SRCS
src/app_desktop.cc
src/heartbeat_date_storage_desktop.cc
Expand Down
2 changes: 2 additions & 0 deletions app/src/app_common.cc
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ const char* kCpuArchitecture = "arm32";
const char* kCppRuntimeOrStl = "libcpp";
#if FIREBASE_PLATFORM_IOS
const char* kOperatingSystem = "ios";
#elif FIREBASE_PLATFORM_TVOS
const char* kOperatingSystem = "tvos";
#elif FIREBASE_PLATFORM_OSX
const char* kOperatingSystem = "darwin";
#else
Expand Down
6 changes: 3 additions & 3 deletions app/src/include/firebase/app.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#include <map>
#include <string>

#if FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
#ifdef __OBJC__
@class FIRApp;
#endif // __OBJC__
Expand Down Expand Up @@ -718,14 +718,14 @@ class App {
/// @return Global reference to the FirebaseApp. The returned reference
/// most be deleted after use.
jobject GetPlatformApp() const;
#elif FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
#ifdef __OBJC__
/// Get the platform specific app implementation referenced by this object.
///
/// @return Reference to the FIRApp object owned by this app.
FIRApp* GetPlatformApp() const;
#endif // __OBJC__
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_ANDROID, FIREBASE_PLATFORM_IOS, FIREBASE_PLATFORM_TVOS
#endif // INTERNAL_EXPERIMENTAL

private:
Expand Down
4 changes: 4 additions & 0 deletions app/src/include/firebase/internal/platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@

#define FIREBASE_PLATFORM_ANDROID 0
#define FIREBASE_PLATFORM_IOS 0
#define FIREBASE_PLATFORM_TVOS 0
#define FIREBASE_PLATFORM_OSX 0
#define FIREBASE_PLATFORM_WINDOWS 0
#define FIREBASE_PLATFORM_LINUX 0
Expand All @@ -51,6 +52,9 @@
#elif defined(TARGET_OS_IOS) && TARGET_OS_IOS
#undef FIREBASE_PLATFORM_IOS
#define FIREBASE_PLATFORM_IOS 1
#elif defined(TARGET_OS_TV) && TARGET_OS_TV
#undef FIREBASE_PLATFORM_TVOS
#define FIREBASE_PLATFORM_TVOS 1
#elif defined(TARGET_OS_OSX) && TARGET_OS_OSX
#undef FIREBASE_PLATFORM_OSX
#define FIREBASE_PLATFORM_OSX 1
Expand Down
2 changes: 1 addition & 1 deletion app/src/locale.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include "app/src/include/firebase/internal/platform.h"
#include "app/src/log.h"

#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
#error "This file does not support iOS and OS X, use locale_apple.mm instead."
#elif FIREBASE_PLATFORM_ANDROID
#error "This file is not support on Android."
Expand Down
26 changes: 15 additions & 11 deletions app/src/semaphore.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,11 @@

#include <cassert>

#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
#include "app/src/mutex.h"
#include "app/src/pthread_condvar.h"
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS ||
// FIREBASE_PLATFORM_TVOS

#if !defined(FIREBASE_NAMESPACE)
#define FIREBASE_NAMESPACE firebase
Expand All @@ -50,7 +51,7 @@ namespace FIREBASE_NAMESPACE {
class Semaphore {
public:
explicit Semaphore(int initial_count) {
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
// MacOS requires named semaphores, and does not support unnamed.
// Generate a unique string for the semaphore name:
static const char kPrefix[] = "/firebase-";
Expand Down Expand Up @@ -94,7 +95,7 @@ class Semaphore {
}

~Semaphore() {
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
// Because we use named semaphores on MacOS, we need to close them.
bool success = (sem_close(semaphore_) == 0);
assert(success);
Expand All @@ -110,9 +111,10 @@ class Semaphore {
}

void Post() {
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
MutexLock lock(cond_mutex_);
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS ||
// FIREBASE_PLATFORM_TVOS

#if !FIREBASE_PLATFORM_WINDOWS
bool success = (sem_post(semaphore_) == 0);
Expand All @@ -124,10 +126,11 @@ class Semaphore {
(void)success;
#endif

#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
// Notify any potential timedWait calls that are waiting for this.
cond_.NotifyAll();
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS ||
// FIREBASE_PLATFORM_TVOS
}

void Wait() {
Expand Down Expand Up @@ -164,7 +167,7 @@ class Semaphore {
// before returning.
// Returns false if it was unable to acquire a lock, true otherwise.
bool TimedWait(int milliseconds) {
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
MutexLock lock(cond_mutex_);
return cond_.TimedWait(
cond_mutex_.native_handle(), [this] { return this->TryWait(); },
Expand All @@ -184,14 +187,15 @@ class Semaphore {
HANDLE semaphore_;
#endif

#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
// Apple implementations need a condition variable to make TimedWait() work.
Mutex cond_mutex_;
internal::ConditionVariable cond_;
#elif !FIREBASE_PLATFORM_WINDOWS
// On non-Mac POSIX systems, we keep our own sem_t object.
sem_t semaphore_value_;
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS ||
// FIREBASE_PLATFORM_TVOS
};

// NOLINTNEXTLINE - allow namespace overridden
Expand Down
9 changes: 5 additions & 4 deletions app/src/time.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,11 @@
#include <unistd.h>
#endif // FIREBASE_PLATFORM_WINDOWS

#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
#include <mach/mach.h>
#include <mach/mach_time.h>
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#endif // FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS ||
// FIREBASE_PLATFORM_TVOS

#if !defined(FIREBASE_NAMESPACE)
#define FIREBASE_NAMESPACE firebase
Expand Down Expand Up @@ -124,10 +125,10 @@ inline uint64_t GetTimestamp() {
#if FIREBASE_PLATFORM_WINDOWS
// return the elapse time since the system is started in milliseconds
return GetTickCount64();
#elif FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS
#elif FIREBASE_PLATFORM_OSX || FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
// clock_gettime is only supported on macOS after 10.10 Sierra.
// mach_absolute_time() returns absolute time in nano seconds.
#if FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
// Note that the same function does NOT return nano seconds in iOS. Requires
// mach_timebase_info_data_t to convert returned value into nano seconds.
// However, the conversion may have potential risk to introduce overflow or
Expand Down
8 changes: 4 additions & 4 deletions app/tests/app_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
#include "TargetConditionals.h"
#endif // __APPLE__

#if FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
// Declared in the Obj-C header fake/FIRApp.h.
extern "C" {
void FIRAppCreateUsingDefaultOptions(const char* name);
Expand Down Expand Up @@ -106,7 +106,7 @@ class AppTest : public ::testing::Test {

// Create a mobile app instance using the fake options from resources.
void CreateMobileApp(const char* name) {
#if FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
FIRAppCreateUsingDefaultOptions(name ? name : "__FIRAPP_DEFAULT");
#endif // FIREBASE_PLATFORM_IOS
#if FIREBASE_ANDROID_FOR_DESKTOP
Expand Down Expand Up @@ -146,7 +146,7 @@ class AppTest : public ::testing::Test {
// Clear all C++ firebase::App objects and any mobile SDK instances.
void ClearAppInstances() {
app_common::DestroyAllApps();
#if FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
FIRAppResetApps();
#endif // FIREBASE_PLATFORM_IOS
#if FIREBASE_ANDROID_FOR_DESKTOP
Expand Down Expand Up @@ -241,7 +241,7 @@ TEST_F(AppTest, LoadDefault) {
EXPECT_STREQ("fake messaging sender id from resource",
options.messaging_sender_id());
EXPECT_STREQ("fake database url from resource", options.database_url());
#if FIREBASE_PLATFORM_IOS
#if FIREBASE_PLATFORM_IOS || FIREBASE_PLATFORM_TVOS
// GA tracking ID can currently only be configured on iOS.
EXPECT_STREQ("fake ga tracking id from resource", options.ga_tracking_id());
#endif // FIREBASE_PLATFORM_IOS
Expand Down
Loading