如何使用iAd在应用程序中展示Banner广告

2023-11-01

 
本文由  Da杯柠檬水(微博) 翻译自  AppCoda
 
虽然,你可能即将开始开发下一个超级应用程序,你的一切规划和设计都已就绪,但还是有一件事可能你并没有把它考虑进去--如何通过它盈利呢?有两种选择,要么使它成为一个付费应用程序,那些潜在的用户可以付费下载;或者使它成为一个免费的应用程序,添加一些广告,从广告中赚取收入。
 
如今的趋势表明,用户更有可能下载免费的应用,而不是收费的应用程序。他们只会购买真正值得购买的应用,或者它是超有名气,并获得良好的评价。然而,如果你决定让你的app免费时,就可以在其内整合广告。要做到这一点,你有不同的服务选择来显示广告,其中一个是由苹果提供的iAd网络。毋庸置疑,你甚至已经从教程的标题看出,今天的话题是关于如何使用iAd广告,但是在行动所有之前让先看一些介绍性的东西。
 
在实际开发开始前确定你的应用是免费还是付费非常重要,因为它会直接影响到你的工作。对于付费应用,就没有必要做任何特别的考虑,但是免费的应用程序需要考虑在应用中的什么地方展示广告,并在相应界面进行设置。说到位置,广告应放置到视图控制器的底部或者顶部。如果你的app不包含tab bar,那么广告应该放在屏幕的底部,否则应该放置在屏幕顶部。请注意,退一步讲,如果您在视图中其他地方显示广告,就违背了Human Interface Guidelines,苹果将会拒绝你的应用。
 
除了上述所有关于广告位置的规定外,还有一组规则你更应该考虑。首先,不要指望广告是始终可用。各种网络或服务器端的问题可能会给广告带来麻烦,并且你还要考虑当没有广告显示时可能出现难看的空白。当没有广告时显示另一个有意义的视图是个不错的选择。其实,这完全取决于你的应用程序的设计是否应该显示另一个视图,而不是广告横幅显示与否。
 
另外,banner广告不应该一直被其他视图控制器遮蔽。你必须确保他们会出现在最可见的视图控制器上,用户与应用程序交互时,会花更多的时间在上面,这为您的广告获得用户点击和盈利提供了最大的可能性。
 
至于收入,当用户点选广告时苹果和开发者都会受益。实际上,开发商的分得了百分之70%的收入,其余30%是提供iAd网络服务的苹果所持有。同样的分成也适用于付费应用程序。
 
这是很常见的,独立开发者们和公司遵循另一种方法,创建同一应用程序的两个版本。第一个版本,收费,全功能。第二个版本是免费的,但它不包含所有付费版本特性的功能。该免费版本,也被称为精简版,可以有广告,你以后可能从这些广告获得收入;如果用户喜欢的应用程序并且购买付费版本,那你可以获得额外的收入。请记住,你永远不应该在付费应用程序添加广告。即使苹果允许这样的事情发生,我对这件事也表示严重怀疑,你可能会收到很坏的批评和评分,因为用户是不会花钱看广告的。
 
在本教程的下一节中,我们将一如既往实现一个示例应用程序,并通过这一点,你将学习如何将苹果的广告服务整合到你的项目中。即使你对此不熟悉,但你也会发现,使用广告是一个超级简单的过程。所以,请继续阅读并了解如何这一新的伟大工程!
 
APP概述
与往常一样,我们的教程将根据创建的一个示例应用程序。在一个我们将开始开发之前,我们先看如何通过几步操作整合iAd广告并显示广告横幅。更具体地说,我们将做到以下几点:
1.我们将在视图的底部添加一个banner广告。这将是该广告将在可用时显示的容器。如果没有可用的广告,我们就将其隐藏,直到我们有内容显示。
2.一般来说, 当点击广告时会弹出一个全屏的模态视图,会覆盖屏幕上所有内容。在这种情况下,任何关于视觉更新的关键或重要任务,都必须暂停或停止,并在该广告关闭后重新启动。为了演示如何管理这个过程,我们将使用一个定时器计数,来计算用户观看默认视图控制器的视图秒数,并使用一个标签来展示信息包含的计时器的值。当广告被点击时,我们将停止计数,我们将在它再次关闭后重启计数。
 
此外,在本教程中,我们将使用一个额外的框架,即iAd框架。没有它,就不可能展示和处理iAd广告了。
 
下图说明了本教程中所用的示例应用:
工程创建
让我们首先为示例应用程序创建一个新项目。启动Xcode和在欢迎窗口中选择相应的选项,如下图:
在出现的向导中,根据该节的iOS应用程序类别,选择单一视图应用程序模板(Single View Application):
 
单击下一步,在Product Name字段中设置的iAdDemo作为项目的名称。此外,请确保设备菜单选项选择的是iPhone。其他设置保持原样,并继续:
在引导的最后一步选择一个目录来保存项目,然后单击创建。
 
界面配置
现在我们已经建立了一个空项目,让我们在应用程序的界面上开始工作吧。点击Main.storyboard文件展示Interface Builder。下面你看到的是所有你应添加的子视图以及他们的属性,所以我们在这部分工作的最后结果类似于前面所示的程序图。请注意,您可以跳过描述子视图的这部分,如果你只是想集中讨论了banner广告。
 
UILabel
1. Frame: X=20, Y=60, Width=280, Height=40
2. Text: iAd Integration
3. Font: Avenir Black, 24.0pt
4. Text Alignment: Center
 
UILabel
1. Frame: X=20, Y=108, Width=280, Height=21
2. Text: by Appcoda
3. Font: Avenir Medium Oblique, 17.0pt
4. Text Alignment: Center
5. Text Color: Red=255, Green=128, Blue=0
 
UILabel
1. Frame: X=20, Y=360, Width=280, Height=40
2. Text: None
3. Font: Noteworthy Light, 15.0pt
4. Text Alignment: Center
5. Text Color: Light Gray
 
UILabel
1. Frame: X=0, Y=518, Width=320, Height=50
2. Text: Ad banner will appear here
3. Font: Avenir Medium, 14.0pt
4. Text Alignment: Center
5. Text Color: White
6. Background Color: Red=255, Green=128, Blue=0
 
ADBannerView
1. Frame: X=0, Y=518, Width=320, Height=50
 
加入上述所有子视图,并设置其属性后如图所示,你的界面看起来应该像这样:
因此有必要现在就创建并连接两个IBOutlet属性。第一个连接banner广告视图,而第二个将连接到一个不包含文本的标签。对于这个标签,我们将稍后显示的时间计数器的值。打开ViewController.h文件,添加如下两行:
 
 
  1. @interface ViewController : UIViewController <ADBannerViewDelegate> 
  2.  
  3. @property (weak, nonatomic) IBOutlet ADBannerView *adBanner; 
  4.  
  5. @property (weak, nonatomic) IBOutlet UILabel *lblTimerMessage; 
  6.  
  7. @end 
 
此时Xcode将发出错误和一些警告。那是因为我们还没有加入iAd的框架。我们并没有在文件中加入相应的库。让我们来解决它,让我们开始加入框架。在项目导航器(Project Navigator)中,单击iAdDemo项目,然后点击General选项卡。
接着,在屏幕的底部,在Linked Frameworks and Libraries部分,单击加号图标添加新的框架。在出现的新窗中,开始输入文字:“iAd Framework”,Xcode会立即显示它。选中它,然后点击Add按钮:
现在,回到ViewController.h头文件,并导入下一个库:
 
 
  1. #import <iAd/iAd.h> 
此时,Xcode中将不会再显示任何错误和警告。最后,我们的类必须采取banner广告协议,这样我们就可以访问所有必要的委托方法。修改界面标题行,如下所示:
 
 
  1. @interface ViewController : UIViewController <ADBannerViewDelegate> 
 
最后的步骤,这两个IBOutlet属性必须被连接到相应的子视图。打开Main.storyboard文件,并把adBanner属性连接到该banner视图, 同时把lblTimerMessage标签连接到无文字标签视图。
iAd的整合
通过将banner广告添加到界面以及把iAd框架到项目中,广告已经能够被传递到应用程序。然而,没有处理是可用的,因此我们的目标是采取一切行为让广告横幅的管理可行的。
 
iAd框架提供了几个委托方法来管理广告。这些方法让我们知道一个广告即将被显示或它已经显示出;当用户点击一个广告时发生错误以及没有更多的广告可以送达;当用户点击广告以查看它的全屏视图时模态视图丢失等。除了所有这些,你应该时刻记得广告可能不会被传达。因此,直到第一个广告准备好要显示时,横幅广告必须是不可见的。它也应该成为隐藏在iAd网络将停止投放广告的一些原因。当iAd网络因为一些原因停止广告服务时它也应该是隐藏的。
 
在深入代码之前,我们开始必须执行两件事情:我们先构造横幅广告视图的委托的类,其次将其隐藏。打开ViewController.m文件,并转到viewDidLoad方法并补充下几行:
 
 
  1. - (void)viewDidLoad 
  2.     [super viewDidLoad]; 
  3.     // Do any additional setup after loading the view, typically from a nib. 
  4.  
  5.     // Make self the delegate of the ad banner. 
  6.     self.adBanner.delegate = self; 
  7.  
  8.     // Initially hide the ad banner. 
  9.     self.adBanner.alpha = 0.0; 
 
正如你看到的,通过把它的Alpha值设为0,我们隐藏了banner视图。随后,当一个委托方法会通知我们,广告已准备好要显示时,我们再将这个值设置为1,另外我们也使用动画让其更具吸引力。更改alpha值,显然不是隐藏或显示广告横幅的唯一途径。还有许多其他的方法来做到这一点,例如设置更改隐藏显示栏的属性的值,或一开始就把banner广告放置在可见屏幕区域之外。用什么方法,你最终的选择完全取决于你,选择最适合你应用的方法。为了简便起见,我只是选择使用alpha值。
 
该ADBannerViewDelegate协议总共提供5个委托方法。通过它们,我们可以管理广告和应用程序的最终行为。我们会逐个进行简单的分析。需要注意的是在每一个委托方法体里,我特意加了NSLog命令,所以当我们运行应用程序后可以知道调用了哪一种方法。
 
第一种方法:
 
 
  1. -(void)bannerViewWillLoadAd:(ADBannerView *)banner{ 
  2.     NSLog(@"Ad Banner will load ad."); 
 
从方法的名称很容易得出结论,当一个新的广告即将被载入时调用。请注意,当这个方法被调用时广告还没有准备好要显示。
 
第二个委托方法:
 
 
  1. -(void)bannerViewDidLoadAd:(ADBannerView *)banner{ 
  2.     NSLog(@"Ad Banner did load ad."); 
当新广告已加载并准备显示时调用该方法。随后,在这个方法中,我们需要添加能让banner广告再次可见的代码,这样我们就知道有广告可以显示。
 
第三个委托方法:
 
 
  1. -(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave{ 
  2.     NSLog(@"Ad Banner action is about to begin."); 
  3.  
  4.     return YES; 
当用户点击banner广告时将调用此方法,并且该广告将以全尺寸模式视图显示。当发生这种情况时,需要暂停用户的任何视觉上的进程或关键任务,直到解除模态视图。这种方法有趣之处是它返回的值。当返回值是YES,那么广告将显示在全屏视图。但是,如果返回值是NO,当用户点击该广告时,什么都不会发生。
 
第四个委托方法:
 
 
  1. -(void)bannerViewActionDidFinish:(ADBannerView *)banner{ 
  2.     NSLog(@"Ad Banner action did finish"); 
 
全屏视图添加解除时调用该方法。这是非常有用的,因为在这里任何暂停或停止任务都应该被再次放到Action里了。
 
最后,第五个委托方法:
 
 
  1. -(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{ 
  2.     NSLog(@"Unable to show ads. Error: %@", [error localizedDescription]); 
这个方法也是非常有用和重要的,因为它调用的时候没有广告可被传递到应用程序。当它被调用时,我们的工作就是隐藏banner视图,以便在没有广告展示时,不会给用户一个空白区。
 
正如你所了解的,所有这些委托方法都使广告处理变得非常容易。现在,正如我们之前所说,我们必须在广告已准备好要显示时展示banner广告,所以要修改bannerViewDidLoadAd:委托方法,如下所示:
 
 
  1. -(void)bannerViewDidLoadAd:(ADBannerView *)banner{ 
  2.     NSLog(@"Ad Banner did load ad."); 
  3.  
  4.     // Show the ad banner. 
  5.     [UIView animateWithDuration:0.5 animations:^{ 
  6.         self.adBanner.alpha = 1.0; 
  7.     }]; 
你看,我们用动画的形式设置我们的banner广告视图的alpha值设置为1。该动画将设置成一个淡入效果。
 
最后,当没有广告将显示时,我们应该隐藏的广告横幅视图。在bannerView:didFailToReceiveAdWithError:添加与上述相同的代码,这一次设置Alpha值为0:
 
 
  1. -(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{ 
  2.     NSLog(@"Unable to show ads. Error: %@", [error localizedDescription]); 
  3.  
  4.     // Hide the ad banner. 
  5.     [UIView animateWithDuration:0.5 animations:^{ 
  6.         self.adBanner.alpha = 0.0; 
  7.     }]; 
与广告最重要的相关工作已经完成。在本教程的下一节中,我们将看到如何使用其他委托方法,但是我们的应用程序已经可以使用了。所以,你可以对它进行一次尝试,等待第一个广告被显示。
 
添加计数器
广告横幅现在已经能很好的工作了,最重要的环节--正确地显示和隐藏的横幅广告已经实现。然而,本教程并不只是讨论所有重要的委托方法,所以在这一节中我们要做一个有趣的项目。我们将使用一个定时器(一个NSTimer对象),将计算用户看到视图控制器场景的秒数,并利用iAd的框架提供的委托方法,在广告以全屏模式展示时,我们将暂停计数。当广告视图解除后,计数器将重新工作。
 
让我们开始通过声明三个属性,以实现我们需要的目的。第一个属性是定时器对象,第二个将用于计算秒数的整数值,最后第三个属性是一个boolean标志,将指示计数是否应该暂停。在ViewController.m文件,转到私有类部分,并添加如下所示的属性:
 
 
  1. @interface ViewController () 
  2.  
  3. @property (nonatomic, strong) NSTimer *timer; 
  4.  
  5. @property (nonatomic) int secondsElapsed; 
  6.  
  7. @property (nonatomic) BOOL pauseTimeCounting; 
  8.  
  9.  
  10. @end 
 
现在,在viewDidLoad方法中,让我们做一些初始化:
 
 
  1. - (void)viewDidLoad 
  2.     [super viewDidLoad]; 
  3.       ... 
  4.      ... 
  5.  
  6.     // Start the timer. 
  7.     self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showTimerMessage) userInfo:nil repeats:YES]; 
  8.  
  9.     // Set the initial value for the elapsed seconds. 
  10.     self.secondsElapsed = 0; 
 
正如你在创建定时器对象过程中看到的那样,选择器参数被设置为showTimerMessage方法。这是一个尚不存在的私有方法,由定时器每隔一秒调用(设置为1.0的间隔参数)。当然,我们希望我们的计时器反复工作,所以我们重复设置参数值为YES。
 
现在Xcode显示警告,因为它无法找到上述声明的方法。让我们首先声明这个方法来解决它,然后我们将定义它。回到私有类部分,并添加下一行:
 
 
  1. @interface ViewController () 
  2.  
  3. ... 
  4. ... 
  5.  
  6. -(void)showTimerMessage; 
  7.  
  8. @end 
 
现在在它的定义中,你会看到下面的代码片段,代码执行流程依赖于pauseTimeCounting标志。如果它的值是false,那么我们将继续计数和更新lblTimerMessage中的文本。显然,当它的值为true,我们就不计数了。注意,任何文本更新之前有必要增加secondsElapsed属性的值。实现是非常简单的,所以你看:
 
 
  1. -(void)showTimerMessage{ 
  2.     if (!self.pauseTimeCounting) { 
  3.         self.secondsElapsed++; 
  4.  
  5.         self.lblTimerMessage.text = [NSString stringWithFormat:@"You've been viewing this view for %d seconds", self.secondsElapsed]; 
  6.     } 
  7.     else
  8.         self.lblTimerMessage.text = @"Paused to show ad..."
  9.     } 
 
让我们来看看如何使用其他两个iAd的委托方法。我们看到的第一个是bannerViewActionShouldBegin:willLeaveApplication:。正如我已经说过,这种方法在用户已点击了广告之后被调用,以全屏视图显示该广告。当然,有必要将方法的返回值设置为YES,否则将没有广告显示。当调用此方法时我们所要的就非常简单了: 告诉我们的应用程序应该暂停时间计数。想要做到这一点,我们可简单地改变pauseTimeCounting标志的值。让我们先来看看方法:
 
 
  1. -(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave{ 
  2.     NSLog(@"Ad Banner action is about to begin."); 
  3.  
  4.     self.pauseTimeCounting = YES; 
  5.  
  6.     return YES; 
 
除了暂停计数过程, 当一个带有广告的全图像视图被关闭时,我们还必须允许它可以继续下去。为了这个目的,我们将使用bannerViewActionDidFinish:委托方法。在这里面,我们将简单地再次更改标志的值。如下:
 
 
  1. -(void)bannerViewActionDidFinish:(ADBannerView *)banner{ 
  2.     NSLog(@"Ad Banner action did finish"); 
  3.  
  4.     self.pauseTimeCounting = NO; 
 
这是我们最后的环节!现在,当广告横幅被点击时计数将暂停;当banner解除时,它会再次计数。
 
编译并运行应用程序
此时,你可以自由地编译和运行应用程序。你会发现,广告横幅将会在屏幕底部出现一段时间,计数器的值会显示在消息标签上。点击广告横幅,就会看到一个全屏模式广告。当您返回到视图控制器的场景,并显示正在观看广告时,你看到的计数器并不是活跃的。如果突然没有广告被服务,不用担心,这是正常的。广告投放可能随时会停止。
 
作为一个额外的练习,你可以尝试在视图的顶部显示的广告横幅。
总结
广告集成到应用程序中是一个相当常见的策略,而且是一个很好的方式,让你的免费应用程序也能带来一些收入。说实话,也许你不会通过广告赚一大笔,但如果你的应用程序获得大的下载量是,那么你就可能有一个显著的收益。正如你在本教程中所看到的,有关于广告横幅简单的规则,以及所需的代码仅几行而已。所以,如果你还在想着是否应该在你的应用程序中添加广告以及如何添加,那么这是一个不错的机会。当然,官方文档也是如此建议并鼓励使用他们的。我希望这个教程对大家能有一些帮助,并希望你一如既往地随时与我们分享任何想法或意见。
 
你可以从这里 下载完整的Xcode项目,以供参考。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用iAd在应用程序中展示Banner广告 的相关文章

  • 使用 Swift 创建 SKSpriteNode 子类

    我正在尝试创建作为 SKSpriteNode 子类的类 并且我想向其添加其他属性和函数 但在第一步中我遇到了错误 这是我的代码 import SpriteKit class Ball SKSpriteNode init super init
  • iOS 有没有办法通过按钮调整图像大小?

    如下图所示 按钮的图像跨越了按钮边界 有没有办法通过故事板或以编程方式使图像适合按钮的边界 更改按钮Style from Plain to Default 这是一个限制为60 x 60 with a 80 x 80图像与Style Plai
  • 如何查看iOS11屏幕录制是否开启?

    为了检测 iOS11 屏幕录制功能的开或关 我使用了 isCaptured 和 UIScreenCapturedDidChange 通知 当我第一次启动应用程序并在 iOS11 内置屏幕录制功能上时 它会通知选择器方法 值为 True 但是
  • 将粗体应用于 NSAttributedString 的一部分,同时保留字体大小和外观

    我正在为 iOS 开发一个富文本编辑器 使用UITextView连同一个NSAttributedString 它的功能与传统功能类似 即选择一个区域 单击一个按钮 并将该效果应用于该区域 同时保留文本上的任何其他属性 不幸的是NSAttri
  • 两个 UIBezierPaths 交集作为 UIBezierPath

    我有两个UIBezierPaths 一个表示图像部分的多边形 另一个是要在其上绘制的路径 我需要找到它们之间的交集 以便只有该交集区域内的点才会被着色 有没有方法在UIBezierPath可以找到两条路径之间的交点 或新路径 我不知道获取作
  • SwiftUI 图像 ClipsToBounds

    尝试使用 SwiftUI Xcode 11 0 beta 2 我尝试用图像填充视图 Image large resizable aspectRatio contentMode fill frame width 80 height 80 al
  • 当 SwiftUI 中列表数据源为空时,如何在视图中心显示文本消息?

    struct LandmarkList View var body some View NavigationView List landmarkData landmark in LandmarkRow landmark landmark 我
  • 防止 Realm 在更新对象时覆盖属性

    我已经在 iOS 中设置了一个 REST API 来连接领域对象 然而 我发现在我的对象中创建最喜欢的标志存在问题 我创建了一个最喜欢的布尔值 但是每次从 API 更新该对象时 它都会再次将最喜欢的值设置为默认 false 在这里 我希望这
  • HTML 5 + iOS - 创建混合应用程序

    我正在尝试将我的本机 iOS 应用程序转换为使用 HTML 5 的混合应用程序 经过研究后我最终得到了jQuery 移动 phoneGap 我的问题是 是否可以将 html 5 和本机 iOS 功能混合在一个单一的版本中 看法 例如我可以使
  • 在 iMessage 应用程序中检查横向/纵向方向(扩展)

    见过很多检查方向的解决方案 但奇怪的是 没有一个有效 下面是代码片段 override func viewWillTransition to size CGSize with coordinator UIViewControllerTran
  • 在启用 Bitcode 的情况下导出时出错(未找到架构 armv7 的符号)

    我有一个相当老的项目 其最低部署目标设置为 iOS 8 4 由于技术原因位码must被启用 该项目构建并运行良好 然而 当尝试导出存档的版本时 就会出现问题 我使用的是 Xcode 8 2 1 当我使用以下选项创建测试版本 使用企业证书签名
  • 转换任何对象?到字符串

    我有一个返回 AnyObject 的函数 func aFunction param String gt AnyObject 如何将其转换为字符串 和字符串 尝试这个 if let result aFunction test as Strin
  • 如何在 Objective-C 中的导航栏中央添加图像?

    我正在IOS中开发 我使用以下代码来设置背景navigationBar self navigationController navigationBar setBackgroundImage UIImage imageNamed bar ba
  • 何时以及为何使用多个 NSManagedObjectContext?

    基本上 我在我的应用程序中只使用了一个 moc 但我认为在某些情况下我应该使用多个 NSManagedObjectContext 什么时候应该使用多个 NSManagedObjectContext 我听说在某些情况下我应该使用 3 moc
  • IOS 无法从 Google Drive 获取文件

    这是我的代码 GTLQueryDrive query GTLQueryDrive queryForFilesList query q NSString stringWithFormat IN parents root self driveS
  • “找不到开发者磁盘映像”

    最近我收到错误 找不到开发人员磁盘映像 我认为自从我将 iPhone 上的 iOS 更新到 9 1 后就会发生这种情况 如何解决该问题并使 Xcode 支持 iOS 9 1 设 备 Xcode 7 0 1 和 iOS 9 1 不兼容 您需要
  • 具有自定义视图的相机

    我的应用程序使用相机 我想在相机预览上添加叠加层 例如 我想在使用相机时使用相框 还想添加一个用于相机操作的自定义栏 请帮助我做同样的事情 您可能正在尝试使用 UIImagePickerController 但我知道这个可以解决你的问题 您
  • Xamarin Form - IOS:如何检测 UIView 大小已更改

    我使用 ContentView 创建了一个 Xamarin 表单 并为 Android 创建了一个渲染器 现在我必须为 IOS 创建一个渲染器 在 android 渲染器中 我可以重写 onSizeChanged 并将这些宽度 高度值传递给
  • 有没有办法反转 SKSpriteNode 的颜色

    我想知道是否可以反转 SKSpriteNode 的颜色 或调整色调 您可以通过应用带有 SKEffect 节点的 CIFilter 来反转颜色 像这样的东西应该有效 SKEffectNode effectNode SKEffectNode
  • FlurrySDK 与 cocoapods

    我正在尝试使用 Cocoapods 将 FlurrySDK 框架集成到我的应用程序中 正如我已经使用很多框架所做的那样 但由于某种原因 xcode 不断抛出此编译错误 Undefined symbols for architecture a

随机推荐

  • Ubuntu安装jenkins

    1 通过命令安装 sudo apt get install jenkins 如果报以下错 E 软件包 jenkins 没有可安装候选 执行以下命令 wget q O https pkg jenkins io debian jenkins i
  • LoadRunner性能测试基本步骤

    前言 本文旨在指导初学者使用LoadRunner进行基础的性能测试 我们在接到一个性能测试任务的时候 需要从以下几点考虑 我们的测试对象是什么 测试要求是什么 测试环境怎么部署的 业务规模如何 哪些业务点是客户最关注的等等 下面将从性能测试
  • Breakpad(跨平台crash工具)

    最近海思平台在项目测试过程中 经常出现coredump的问题 尤其是那些的不经常挂的情况 光看日志定位问题真的很难 同时生成的core文件由于各种动态链接和静态链接 分析起来实在是比较困难 为解决coredump问题 有必要提供一个跨平台的
  • Docker Volume原理及使用

    1 Volume原理 想要了解Docker Volume 首先我们需要知道Docker的文件系统是如何工作的 Docker镜像是由多个文件系统 只读层 叠加而成 当我们启动一个容器的时候 Docker会加载只读镜像层并在其上 译者注 镜像栈
  • U3D 材质转换为URP渲染

    创建URP项目 然后导入已有的package 发现预览图为品红色的 材质显示不正确 如下图所示 在项目的菜单栏选择升级渲染材质为URP渲染即可 最后的效果如下
  • HJ0427分隔输出

    要求 第一个数N为字符串的数量 第二个以后为连续输入的字符串 字符串之间用空格隔开 若字符串长度大于等于8 则每八个为一组 之间用空格隔开 切割后余下部分不满八个则用0补位 字符串长度小于8 则后补零 补满八个为止 升序输出 输入 2 ab
  • NOI20102010年,世博会在中国上海举办,吸引了数以千万计的中外游客前来参观。暑假期间小Z也来到了上海世博园, 她对世博园的拥挤早有所闻,对有的展馆甚至要排上好几个小时的队才能进入也做好了充分

    NOI2010 2010年 世博会在中国上海举办 吸引了数以千万计的中外游客前来参观 暑假期间小Z也来到了上海世博园 她对世博园的拥挤早有所闻 对有的展馆甚至要排上好几个小时的队才能进入也做好了充分准备 但为了使得自己的世博之旅更加顺利舒畅
  • ios混编flutter相机相册不可用

    问题描述 ios项目混编flutter的时候根据官网的方法添加混编代码后 有时候会出现在flutter端使用image picker插件调用相机相册时 相机相册使用不了的现象 MethodChannelFilePicker Platform
  • linux学习笔记(字符串测试 for循环)

    例题 1 传递一用户名参数给脚本 判断此用户的用户名跟其基本组的组名是否一致 并将结果显示出来 bin bash A 1 B id u 1 C id g 1 if B eq C then echo A 用户名和组名一样 else echo
  • 30道MySQL基础面试题

    每天晚上 00 00 执行 mysql 数据备份 请写出 crontab 配置项 答案 0 0 mysqldump uroot p123456 flush logs 数据库名 gt 备份文件名 每天凌晨 1 点在 data 目录新建当天日期
  • Vue3状态管理库Pinia——实现简易版购物车

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 正逐渐往全干发展 个人状态 研发工程师 现效力于中国工业软件事业 人生格言 积跬步至千里 积小流成江海 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 3项目实战 Node js
  • 为什么不能直接通过IP访问网站

    转 http www examw com java jichu 143769 为什么不能直接通过IP访问网站 为什么不能直接通过IP访问网站 从理论上说 在IE 或其他的Web浏览器 如Firefox 的地址栏中输入IP地址 都可能访问ww
  • AD个人常用快捷键记录

    避免以后太长时间没用忘记AD快捷键 快捷键 F2 拉线 F3 过孔 F4 敷铜 F9 矩形排列 7 切割铜皮 2 线选 3 框选 6 坐标移动 N 显示隐藏飞线 A 对齐 丝印位置 R M测量两个点之间的距离 R P测量两个物体边到边的最小
  • java 项目 远程调试_Java项目远程调试

    准备一个项目 比如我有个SpringBoot项目 打包好 上传服务器 服务器 1 开启端口 8080是项目端口 8000是远程调试端口 root localhost app firewall cmd zone public add port
  • gitlab代码上传方式1

    本地代码上传到gitlab上操作流程 自我总结 1 在gitlb上新建项目 点击New project 首次将代码上传到gitlab上时 先配置Settings中的SSH Keys 2 配置SSH Keys 那么SSH Keys是怎么获得的
  • 推荐几款可以直接在手机上编程的app(包含Java、C、Python等)

    这里介绍几款可以在手机上编程的app 分别是 1 java和Android AIDE集成开发环境 2 C语言 c语言编译器 C4droid 3 python QPython3 Termux 4 CSS HTML JavaScript HTM
  • python 预测任意天后股票数据_机器学习交易——如何使用回归预测股票价格?【翻译】...

    前几天 我读了一篇关于人工智能到目前为止是如何发展的以及它将走向何方的文章 我被吓了一跳 我也很难理解作者所描绘的未来的可能性 这是人工智能在医学领域应用的可能性之一 外科医生可以用她的运动皮层控制一个机器手术刀 而不是用她的手 她可以从手
  • 团队管理那点破事,OKR绩效、核心人才、面试、技术分享、研发流程

    微信搜索 微观技术 关注这个不喜欢内卷的程序员 精彩文章汇总 GitHub https github com aalansehaiyang technology talk Star 12K 汇总java生态圈常用技术框架 开源中间件 系统架
  • Redisson分布式锁

    目录 一 分布式锁 1 分布式锁的设计原则 2 分布式锁的实现方案 二 Redisson 三 Redisson分布式锁 1 引入Redisson依赖 2 配置Redis 3 注入RedissonClient 4 使用RLock 总结 一 分
  • 如何使用iAd在应用程序中展示Banner广告

    本文由 Da杯柠檬水 微博 翻译自 AppCoda 原文 Using iAd to Display Banner Ad in Your App 虽然 你可能即将开始开发下一个超级应用程序 你的一切规划和设计都已就绪 但还是有一件事可能你并没