Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
go play outside Skyler
Nov 7, 2005


Is this the place to ask about AppStore rejection?

We recently made an app for a customer who is a Nightclub. Our app is a tabbar navigation app. The tabs are as follows:
1) Calendar - has a list of all upcoming events with a flyer, when tapped there is a description as well as a facebook button to get to the event on Facebok. You can choose which days to display (Thursday, Friday, Saturday)
2) Media - Has photo galleries and a video gallery for previous events. The photos use Three20 gallery and Videos are on YouTube
3) Inbox - Some sort of inbox where the guy from the nightclub can send "messages" and updates to app users. It does not use push notifications because we thought it would be too intrusive and not really that useful
4) Mix - Has a list of music you can listen to. We use the AVPlayer class to stream an MP3 from the server. Music can be listened to while using the app but we did not implement a background process to keep the music playing when the app is closed
5) Infos - Which is just a page with the name, logo, adress and contact information of the club

We did not do any custom cells, images or anything like that because we thought it'd be better to use the Apple standards for displaying data instead of having gradients all over the place.

We sent it for review to the app store exactly 1 week ago and go a negative reply saying:

2.13: Apps that are primarily marketing materials or advertisements will be rejected

And that's it. What should we do from here? Our client won't pay us until the app is in the store, I've already poured many hours into this app and it's pissing me off. Right now the app does not have much content because the client did not give us any. I had to make up for it by looking at other sites in which they are referenced to get some flyers/events, but we only have 1 photo gallery and 1 video and 1 music... I'm guessing that's a large part of the issue?

Adbot
ADBOT LOVES YOU

go play outside Skyler
Nov 7, 2005


pokeyman posted:

I helped write an app that's been in review for a couple of weeks. The only communication from Apple was the boilerplate "this is taking a bit longer" note that was received a couple of days after submission. Since then, nothing. Has anyone else in this position managed to email, phone, or otherwise usefully make contact with someone to at least see what's up?

Obviously I don't think there are any infringements in the app but equally obviously that view isn't yet shared by those who matter.

Well I guess it's a good sign, since an app of ours that was rejected was In Review for only 2 days!

It's hard to get in touch with anyone, Apple just doesn't care. Yeah, you paid 99$ and poo poo but really they couldn't care less. You're customer #223134 submitting app #3829847174 . The only times I've gotten in contact with them successfully was when I was trying to send my company's documents to get approved. But they had an interest since I was going to pay them 99 bucks.

Try this list:
http://developer.apple.com/contact/phone.html

I doubt the folks at Apple take more than 5 minutes reviewing an app.

go play outside Skyler
Nov 7, 2005


Well, we got some feedback from our app which was rejected for being "Marketing materials or advertisement". We basically removed the "inbox" (which, come to think about it, was just a way for us to shove poo poo down people's throats), added 2-3 extra features and mostly a lot of content, BUT we got rejected again!

Fortunately, though, this is a technical issue which means I can get it fixed in no time. However, I'm just not really clear on what exactly they mean with the following sentence:

quote:

9.3: Audio streaming content over a cellular network may not use more than 5MB over 5 minutes

As you might remember, we have an audio player which just uses AVPlayer to stream some MP3s from our server. With this rule, do they mean that after 5 megabytes over 5 minutes the app has to say "no more" if on a celular network? Or is it just a convoluted way to say the audio shouldn't be over 5 megs/5 mins = 136 kilobits/sec?

Both options are not hard at all to implement (I can re-encode the MP3s), so if anyone has ever had this issue before (or just understands the rule better) it'd be cool if they could explain it. Thanks!

go play outside Skyler
Nov 7, 2005


klem_johansen posted:

I'm searching around my build settings and info plists for what I can do to change the default language of my app in the store. It's a Chinese app offered only in the Chinese store. It's not really a localized app, so I haven't messed around with that. I have a suspicion that changing the Localization native development region, but I want to be sure before uploading a new binary.

Would setting it to Taiwan make any difference? Or could it be that it's an error on Apple's side? Someone mentioned that it could be a matter for iTunesConnect support.

This is a shot in the dark but... If you can change the country to Taiwan, can't you change it to China? If China's not there, try People's Republic of China as that is the official name of the country.

go play outside Skyler
Nov 7, 2005


Help! My objects are getting deallocated when I call removeObjectAtIndex even though the retainCount is far from 0, and numerus references to that object exist in my code

I can't for the life of me understand why the framework is deallocating objects even though they are referenced everywhere else in my code. I can't exactly give you all my code, but here's the idea.

I have a "Partners" NSMutableArray which belongs to my AppDelegate. I create a bunch of "Partner" objects from an xml file I load. I use TBXML to load it remotely, and have a Class Function (read: static) called "createFromTBXML". This function looks something like this:
code:
+ (Partner*)createFromTBXML:(TBXMLElement*)element{
	Partner* partner = [[Partner alloc] retain];
	partner.Name = [TBXML valueOfAttributeNamed:@"name" forElement:element];
	...
        return partner;
}
That partner which is returned is added to the "Partners" NSMutableArray which belongs to the AppDelegate. So far, so good.

These partners are displayed in a list (UITableView) by a PartnerChooserController

Now the tricky part is that people need to be able to add partners to their favorites, so I have a "Favorites" NSMutableArray which also belongs to the AppDelegate. In the Partner detail view, there's a "Add to favorites" button which basically does
code:
[AppDelegate.Favorites addObject:CurrentViewedPartner];
The favorites viewer is basically the same as the PartnerChooserController.

Now what happens is that in the Partner detail view, there's a button "remove from favorites". This button does something like that:
code:
for(int i = 0; i < [AppDelegate.Favorites count]; i++ ){
	if ( ((Partner*)[AppDelegate.Favorites objectAtIndex:i]).Id == CurrentViewedPartner.Id ){
		[Favorites removeObjectAtIndex:i];
		break;
	}
}
As soon as removeObjectAtIndex is called, the partner is deallocated! I don't understand, it's still in the big "Partners" array, it's still being used by the viewer (CurrentViewedPartner) and in other places. In my Partner's dealloc function, I put something like
code:
NSLog(@"deallocated when retainCount is %d",[self retainCount]);
And it shows unbelievable results like "deallocated when retainCount is 8" or even 12! What am I doing wrong here? I've tried adding a bunch of "retain"s here and there, but no luck.

I love Objective-C but the memory management is still a mystery to me, even after reading the Apple documentation about memory management.

Help!

go play outside Skyler
Nov 7, 2005


Ender.uNF posted:

Do not examine retainCount or pay any attention to it whatsoever. It is the most dangerous form of madness, guaranteed to lead you down the path of destruction.

When an object is being deallocated, what is the point of maintaining retainCount?
Answer: Nothing! by definition, touching a reference after it is deallocated is an invalid operation. Therefore by definition any ivar can return any and all possible values because you are touching memory you promised not to touch. It is no different than saying MyObj *o = (MyObj*)(void*)0x82498384; What is at that memory address? who knows! If you're lucky you'll get an immediate crash.


Second, [[Partner alloc] retain] is not a valid initialized object because you never called init. An alloc'd object is already retained automatically. You should be calling [[Partner alloc] init]. So again, by definition, you can have *any* behavior because you are doing stuff that makes no sense.

Further, a +create method like that should be returning the object autoreleased, so you should be doing [[Partner alloc] init] autorelease]. Then the code that receives the object should retain it if it needs to (placing an object in an array retains it).


You have some serious memory management issues going on and I would suggest reviewing the memory guide, running the Analyze option in Xcode, run the Leaks Instrument, then run with malloc debugging enabled. That should help you track down your memory management issues.

Thank for the help! I reread the documentation and now I understand it better.

HOWEVER, I was not wrong to wonder wtf was happening when the object was being deallocated even though the retainCount was far greater than 1! It turns out, I had this bit of code in the Favoritable class, which is inherited by Partner:
code:
-(void)release{
        [super dealloc];
	Name = nil;
	ShortDescription = nil;
	Icon = nil;
	[super release];
}
What the gently caress was I thinking when I put a dealloc in the release function? Who knows, but now I know it was a stupid as poo poo mistake and I won't ever, ever, ever do this poo poo again.

go play outside Skyler
Nov 7, 2005


For those who are in the "App Store" and "iTunes" discussion, here's a little something I just found out: if you want to promote your app (make a website for it, print an ad, etc) you have to follow some really restrictive rules for your marketing. You need a developper ID to get to this PDF (I won't be hosting it)

https://developer.apple.com/appstore/AppStoreMarketingGuidelines.pdf

Here are some excerpts from this document.

Concerning the "Available on App Store" badge:

quote:

The minimum clear space is equal to
one-quarter the height of the badge.
Do not place photos, typography, or other
graphic elements inside the minimum clear
space. The minimum size is 10 mm for use
in printed materials and 40 pixels for use
onscreen. Use the badge at a larger size
whenever possible, selecting a size that is
clearly legible.

Or, concerning the iPhone images they give you to slap your screenshot on:

quote:

Developers cannot display Apple product images with those of other development
platforms. Do not place an Apple product image alongside the image of any other
mobile or computing device.

quote:

The Apple-provided product image can be displayed only on a white background.
Never place the image on a black background or on any color or pattern

quote:

When promoting your application in marketing communications, state that it is “for”
Apple products. For example, say “App name for iPhone and iPod touch” or “App name
for iPad.” Do not say “iPad app name” or “iPhone app.” When including your company
name, lead with your company name followed by the application name and end with
the appropriate Apple product name(s). For example, it is correct to say “Company
name Game name for iPad, iPhone, and iPod touch.

And there's a LOT of other stuff.

The point of this post was just to hopefully inform newbies, like I was, that working with Apple is no laughing matter. Not only is the review system very opaque (you do not know when/how your app is reviewed), but there's a lot of other rules you have to respect. Do not accept a contract for making an App in the App Store if you've never done it before, you're almost guaranteed to not be able to respect your deadline because of this. Once you know all the perks though, you can estimate very precisely what kind of bumps you're going to run into.

go play outside Skyler
Nov 7, 2005


Martytoof posted:

Here's one I'm unclear on. Is Apple specifically forbidding me from using Myriad fonts on my website/emails/whatever, if I have an app listed on that same page? Or is it just a recommendations?

That seems a little far-reaching to me. I can understand them enforcing guidelines on the link back to their site, I'm okay with that, but telling me I can't use a Myriad font is a little over the line. What if Myriad is the best suited font for my email, flyer, website, etc.?

Usually it all comes down to "don't mislead your users into thinking Apple is endorsing your actions". As long as you don't copy their color scheme, layout and have it look similar enough that it could confuse users, you're fine. They probably just say that to protect themselves in case of a lawsuit or other legal issue.

We had an app rejected because you could participate in contests but the rules did not clearly mention Apple was not involved in any way. We altered the text to mention that and the app got validated, we didn't have to put it in big red letters or anything.

go play outside Skyler
Nov 7, 2005


GazChap posted:

Yeah, that's how I've got it at the moment.

If I then change the contents of said variable though (e.g. the name of a player) how can I pass that back through to the master view controller so that it updates the array?

I've just seen a tutorial online that sets it up through the App Delegate and with some sort of "NSNotificationCenter" stuff that looks like it'll work, is that generally the best way of doing it?

I doubt it'll be a problem once I've got it all set up properly, at the moment the app will be using hardcoded arrays of data while I get the logic working (as it's my first real app), and then I'll transfer it over to SQLite/Core Data, which should make things easier.

If you do it like pokeyman suggested, you are only passing a reference to that object. That means if you update that object, it will also "update it" in the Array (in reality both the array and the detailsViewController are juste holding a pointer to an object). If you need to refresh your parent view, also pass a reference to the parent view with something like

code:
detailsViewController.parentListView = self;
Then you can call, in detailsViewController,

code:
[parentListView reloadData];
Of course you need to create a reloadData method in the parentListView controller which will look something like this:
code:
- (void)reloadData{
	[self.tableView reloadData];
	[self.tableView setNeedsDisplay];
}

go play outside Skyler
Nov 7, 2005


pokeyman posted:

You can do as Sir Davey suggests and keep a reference to the parent controller, or you can use a notification centre, or you can use key-value observing, or a delegate on the navigation controller, or have the master view controller itself deal with reloading the changed item, or just reload everything in -viewWillAppear:.

I'm a fan of the last two options, because they're the least fragile for when you switch to Core Data and/or involve other view controllers. For example, you could maintain a 'toReload' property on the master view controller, set it just before you pop the detail view, and then in -viewWillAppear: reload the object you remembered. Or you could simply reload all the views that display data from the array in -viewWillAppear:.

It's nice to keep relationships between view controllers simple. Parent view controllers set up child view controllers and that's that, no going up the object graph. You prevent retain cycles and make it easy to swap view controllers out, plus there's no future dickery needed if modal views get involved.

That's actually a better solution and it's what I do (call reloadData on -viewWillAppear). However I just felt like it was easier to get it done quickly.

But even for a modal view controller you're going to have a "parent" view. There's always a parent view.

go play outside Skyler
Nov 7, 2005


Just a quick question and maybe to stir up a debate, but is there a difference between using YES/NO, TRUE/FALSE and true/false?

go play outside Skyler
Nov 7, 2005


Help! I'm locked out of my iPhone!

I had the latest beta, and for some reason after the official iOS 7 announcement the update page on my iPhone always said I was up-to-date. I just figured the GM seed was still going to be supported indefinitely.

And now I think Apple just invalidated the version of iOS 7 I had. I can't restore because it says I need to deactivate "Find My iPhone". But I can't do that because my phone is stuck in the "Activation" page! I tried removing my iPhone from my list of devices on icloud.com but to no avail.

Can anyone help me? You can't possibly tell me my iPhone is bricked because of that. That's ridiculous.

go play outside Skyler
Nov 7, 2005


Supersonic posted:

I have an MBP, iPad pro, and iPhone and since the release of Arkit 3 I've been interested in dipping my toes in the water with AR. Can anyone recommend a good jumping off point to get started? I have a bit of experience with Python and am familiar with the basics of programming, but have no experience with graphics or GUIs. I'm a bit confused as it seems like a few paths exist (Arkit 3, RealityKit) and I'm not sure which one I should be starting out with.

Not sure this will be a popular opinion here, but we recently did an AR app with react-native and its react-native-arkit bindings.

Performance is rather good, and I have to say that not having to learn a new language was a nice touch for us!

go play outside Skyler
Nov 7, 2005


duck monster posted:

I've started a new job and inhereted a giant React Native act. Every cell in my body is crying out for the sweet release of death. loving Javascript!

Oh my beloved Swift, we shall meet again, one day. :(

edit: Oh and heres something trippy. You know the 3D view controller inspector thing? Try it on a react native app. Turns out it really is using Native widgets and not skinned up HTML.

React Native is actually pretty loving good.

Data bindings work really well, and the magical LayoutAnimation.ConfigureNext function does wonders to transition between view states.

JS is not the best language but in my opinion it's universal enough that pretty much any dev can get up and running quickly. And if you hate its perks, you can always transpile from TypeScript.

go play outside Skyler
Nov 7, 2005


Simulated posted:

Running animations from a background JS thread does wonderful things for battery life too!

Oh wait, "wonderful" was the wrong word...

Not to derail this thread but React Native has had a "useNativeDriver" option for a while now which simply triggers the animation and lets a native background thread handle the rest. It's all about how you use the tool, really.

go play outside Skyler fucked around with this message at 12:35 on Jan 17, 2020

go play outside Skyler
Nov 7, 2005


Maybe stating the obvious here but I think the best way to handle that situation would be to implement a CPU fallback.

go play outside Skyler
Nov 7, 2005


If anyone is wondering why their apps are now crashing on iOS 16.1, it's because they changed the behavior of how memory is freed. Now it zeroes out everything.

This means that bad uses of withUnsafe or the ampersand which used to go undetected, can now cause weird crashes.

Just thought it might save someone some time.

go play outside Skyler
Nov 7, 2005


Small White Dragon posted:

Is there a name for the thing that lets you run iOS apps on an ARM Mac? I found an issue exclusive to this scenario but it's hard to google for.

XCode just calls it "designed for iPad" as far as i know.

Adbot
ADBOT LOVES YOU

go play outside Skyler
Nov 7, 2005


It pops up again after every system update, including minor ones. It also seems to happen when your phone has been "force locked" and requires your password instead of Face ID.

But as always with Apple this stuff is not documented anywhere and is anyone's guess.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply