iAd in xcode 6 with Swift

adbannerview, iad, swift, xcode, xcode6

Solution

This is how I did it, possibly not all of it is necessary.

I did not use the banner in the Storyboard, so the IBOutlet is not necessary.

Also, if you manually create a banner, you do not need to set `self.canDisplayBannerAds`

This function (ported from ObjC) is how I display the ads.

func loadAds(){
  adBannerView = ADBannerView(frame: CGRect.zeroRect)
  adBannerView.center = CGPoint(x: adBannerView.center.x, y: view.bounds.size.height - adBannerView.frame.size.height / 2)
  adBannerView.delegate = self
  adBannerView.hidden = true
  view.addSubview(adBannerView)
}

This is called in `viewDidLoad`. Then, in the `didLoadAd` delegate method, I set `adBannerView.hidden = false` and in `didFailToReceiveAdWithError`, `adBannerView.hidden = true`

I think `hidden` is better than `alpha` in this situation, as it feels more natural. I believe (but am not sure) that when hidden, the view is not drawn at all by the GPU, while with an alpha of 0, it is still drawn, but made invisible (correct me if I am wrong).

This is my setup, and it worked for me, so hopefully it will work in your case too!

Problem

I'm working to implement a banner ad in the scene, but it always reports "Thread 1: EXC_BREAKPOINT(code=EXC_ARM_BREAKPOINT, subcode=Oxdefe) and the program stops running. I referenced Mr. T's answer in another question about iAd("Swift - ADBannerView") but still couldn't make it. The code looks like this: ``` import UIKit import SpriteKit import iAd class GameViewController: UIViewController, ADBannerViewDelegate { @IBOutlet var adBannerView: ADBannerView override func viewDidLoad() { super.viewDidLoad() println("view loaded") //iAd self.canDisplayBannerAds = true self.adBannerView.delegate = self self.adBannerView.alpha = 0.0 if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { // Configure the view. let skView = self.view as SKView skView.showsFPS = true skView.showsNodeCount = true /* Sprite Kit applies additional optimizations to improve rendering performance */ skView.ignoresSiblingOrder = true /* Set the scale mode to scale to fit the window */ scene.scaleMode = .AspectFill skView.presentScene(scene) } } //iAd func bannerViewWillLoadAd(banner: ADBannerView!) { println("sort of working1") } func bannerViewDidLoadAd(banner: ADBannerView!) { self.adBannerView.alpha = 1.0 println("sort of working2") } func bannerViewActionDidFinish(banner: ADBannerView!) { println("sort of working3") } func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool { println("sort of working4") return true } func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) { } } ``` And I created an ADBannerView in the Main.storyboard and linked it with the @IBOutlet adBannerView. Anyone helps me figure out?

Original source

Related problems