Post

Replies

Boosts

Views

Activity

Reply to Adjusting my background image for different phone sizes?
Make one big image that contains the stay-the-same part plus the border. Create the scene to have the size of the stay-the-same part. Set the scene's scaling mode to aspectFit. Put the background image in the center of the screen. Different parts of the image border will get cut off for devices with different aspect ratios. (Or maybe aspectFill and set the size appropriately so the smaller dimension matches the desired stay-the-same part.)
Apr ’20
Reply to App Uses Non-Exempt Encryption or no?
From Apple's documentation on complying with encryption export restrictions:"Typically, the use of encryption that’s built into the operating system—for example, when your app makes HTTPS connections using URLSession—is exempt from export documentation upload requirements, whereas the use of proprietary encryption is not."https://developer.apple.com/documentation/security/complying_with_encryption_export_regulationsYour bigger problem is likely to be 4.2 in the app store review guidelines: "Your app should include features, content, and UI that elevate it beyond a repackaged website."
Feb ’20
Reply to Submission Rejected stating - 5.1.1 Gender
You haven't provided much to go on, but whatever information you collect has to be needed for some reason. Just disclosing that you're collecting something and linking to the privacy policy in the app doesn't give you a free pass. Since most colleges nowadays are coed, maybe you don't need gender information at all. If your app, e.g., did some sort of profile and then suggested a list of colleges, you could make the list while ignoring gender. When you present the list, you perhaps have little indications already for things like public/private, in-state/out-of-state, 2-year/4-year, etc., and you could just add another indicator for those few colleges that are not coed.
Feb ’20
Reply to Fast way to blur the background behind a Sprite Node
The source of our app is available on GitHub, so you can take a look there. Here's the relevant file:https://github.com/bg2b/RockRats/blob/master/Asteroids/scenes/BasicScene.swiftThere's a discussion of the memory leak issue around line 500 onwards. We ultimately used a kind of pixelated filter for the game's pause effect, but did try a Gaussian blur as well, and that blur shader is still sitting in the code (starting around line 575). It's one pass and not the classic two-pass Gaussian blur since we didn't want to make an intermediate effect node, but you could do that too if you need a large blur.The comments there also mention an alternative approach. You can render the blurred part of the scene into an SKTexture using the view's texture(from:) or texture(from:crop:) methods, then run that texture through a CGImage -> CIFilter -> CGImage -> SKTexture -> SKSpriteNode sequence to get a regular sprite node that shows the desired effect. It's a little slow in general (probably around 1/10 of a second, enough to be noticed when you pressed the pause button in our game). For the blur case, you can avoid that lag by scaling the part to be blurred down, doing the CIFiltering, and then upscaling the result. It's blurry anyway, so you won't notice the difference. We didn't go with that method because we need a different pause effect in certain circumstances where the scaling wasn't feasible.
Feb ’20
Reply to Fast way to blur the background behind a Sprite Node
There appears to be currently (as of iOS 13.x) some memory leak of IOSurface stuff when using an SKEffectNode wth CIFilters. We were using that functionality initially for blurring the playing area when a game was paused. But repeated pausing and unpausing (i.e., toggling shouldEnableEffects) would gradually pump up the number of retained IOSurfaces and memory as much as desired. We switched the code from using a CIFilter to a custom shader on the effect node; that fixed it.
Feb ’20
Reply to Application was rejected because it may do a harm
Yes, there are other possible distractions, but that's why there are settings like Do Not Disturb While Driving to explicitly cut off most of those. Voice navigation is one that is generally allowed, but it's also not as unpredictable. The user is often anticipating potential instructions when approaching the area where there are some turns or exits, the apps often set up a context for when the next instruction will be given (e.g., "proceed 25 km" after merging onto a highway), etc.
Feb ’20
Reply to DualShock 4 not showing up?
I just got one of these and started working with it. It seems to take a little time for the controller to appear and if the first call to [GCController controllers] is near the beginning of app launch, you might get an empty list. Register for the connect/disconnect notifications and the program will be informed shortly when the controller shows up.
Jan ’20
Reply to App Keywords and Spaces
https://developer.apple.com/app-store/search/"Keywords are limited to 100 characters, so it’s important to be concise when describing your app. While spaces should not be used before or after the commas that separate keywords and keyword phrases, you can use spaces to separate words within keyword phrases. For example: Property,Real Estate,House."
Jan ’20
Reply to Is the SpriteKit broken in iOS13.3?
And you're getting no "SKPhysicsContact detected" messages? I'm afraid I'm about at the limit of being able to remotely debug. I'd suggest just making a simple test scene, two squares, set the physics bodies and category/contact bitmasks, and do the rotation. I do this and do get contact messages:class GameScene: SKScene, SKPhysicsContactDelegate { let squareSize = CGSize(width: 100, height: 100) func makeSquare(color: UIColor, category: UInt32) -> SKSpriteNode { let square = SKSpriteNode(color: color, size: squareSize) let body = SKPhysicsBody(rectangleOf: squareSize) square.physicsBody = body square.zPosition = 1 body.categoryBitMask = category body.contactTestBitMask = category ^ 0b11 addChild(square) return square } func didBegin(_ contact: SKPhysicsContact) { guard let node1 = contact.bodyA.node else { return } guard let node2 = contact.bodyB.node else { return } print("contact \(node1.name!) and \(node2.name!)") } func rotate(_ sprite: SKSpriteNode) { sprite.run(.rotate(byAngle: .pi, duration: 1)) } override func didMove(to view: SKView) { let square1 = makeSquare(color: .red, category: 0b01) square1.position = .zero square1.name = "square1" let square2 = makeSquare(color: .blue, category: 0b10) square2.position = CGPoint(x: square1.position.x + 1.05 * squareSize.width, y: square1.position.y) square2.name = "square2" run(.wait(forDuration: 3)) { self.rotate(square1) } } override func update(_ currentTime: TimeInterval) { // Called before each frame is rendered } override init(size: CGSize) { super.init(size: size) physicsWorld.gravity = .zero physicsWorld.contactDelegate = self anchorPoint = CGPoint(x: 0.5, y: 0.5) } required init(coder aDecoder: NSCoder) { fatalError() } }I also checked that at least one (but not both) bodies must have isDynamic true. One thing I hadn't thought about is that the squares will push each other during the rotation, which is kind of suggesting that you may not want the physics engine involved at all. That is, I'd probably use just a discrete grid representation and have a rotating square check the neighboring cells for their status in order to capture them.
Jan ’20