Today Extensinでの不具合でRejectされてしまった…


##Storyboard,AutoLayout使っていませんでした…
アプリ内でセットした画像を表示する機能でした。
ハードコードですが悪しからず…

```objectivec:
-(void)awakeFromNib
{
    [super awakeFromNib];
}
-(id)init{
    NSLog(@"init");
    self = [super init];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDefoltChenge:) name:NSUserDefaultsDidChangeNotification  object:nil];
    }
    return self;
}
-(void)userDefoltChenge:(NSNotification *)notification
{
    [self uploadimage];
}

-(void)uploadimage
{
    NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.com.ID"];
    
    NSData* imageData = [sharedDefaults objectForKey:@"image"];
    
    [imageview setImage:[[UIImage alloc] initWithData:imageData]];
    NSLog(@"");
}

- (void)viewDidLoad {
    NSLog(@"viewDidLoad");
    [super viewDidLoad];
    [self setPreferredContentSize:CGSizeMake(self.view.bounds.size.width,300)];
    imageview = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 300, 300)];
    [self.view addSubview:imageview];
    UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(0, 0, 300, 300);
    [button addTarget:self action:@selector(didButtonTapEvent:) forControlEvents:UIControlEventTouchUpInside];
    [imageview addSubview:button];
    imageview.userInteractionEnabled = YES;
    [self uploadimage];
   }

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}
-(void)didButtonTapEvent:(UIButton *)button
{
    [self.extensionContext openURL:[NSURL URLWithString:@"ID://"] completionHandler:nil];
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
    completionHandler(NCUpdateResultNewData);
}

-(UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
    return UIEdgeInsetsMake(10,
                            (self.view.bounds.size.width-300)/2,
                            10,
                            (self.view.bounds.size.width-300)/2);
}
```

##そのままでもiPhoneでは、問題ないが…
iPadで表示すると画像が約1/3しか表示されませんでした。
methodの呼ばれる順番とwidgetMarginInsetsForProposedMarginInsetsでの、安易な設定が原因でした。

##methodの呼び出される順番
↓の順番で呼ばれる為、init後に呼ばれると勘違いしていた。

```
2014-12-22 11:49:13.678 AppExtention[3918:77730] init
2014-12-22 11:49:13.683 AppExtention[3918:77730] viewDidLoad
2014-12-22 11:49:13.704 AppExtention[3918:77730] widgetMarginInsetsForProposedMarginInsets
2014-12-22 11:49:13.731 AppExtention[3918:77730] wigetPerformUpdate
2014-12-22 11:49:13.791 AppExtention[3918:77730] viewWillAppear
```

##画像を表示するだけであれば
↓へ変更すれば、全ての端末でセンタリングされた状態で表示された。

```objectivec:
//省略
- (void)viewDidLoad {
    NSLog(@"viewDidLoad");
    [super viewDidLoad];
    imageView = [[UIImageView alloc]init];
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    [self.view addSubview:imageView];
    button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = imageView.frame;
    [button addTarget:self action:@selector(didButtonTapEvent:)　forControlEvents:UIControlEventTouchUpInside];
    [imageView addSubview:button];
    imageView.userInteractionEnabled = YES;
    [self uploadimage];
}

//省略

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSLog(@"viewWillAppear");
    [self setPreferredContentSize:CGSizeMake(self.view.bounds.size.width,300)];
    imageView.frame = CGRectMake(0, 0, self.view.frame.size.width, 300);
    button.frame = imageView.frame;
    
}
//省略
-(UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
    NSLog(@"widgetMarginInsetsForProposedMarginInsets");
    return UIEdgeInsetsMake(10,
                            0,
                            10,
                            0);
}

//省略

```

##あとがき
iPadでの表示不具合は、他のアップデートの審査のタイミングで指摘されました。
初回の申請時は、通過していたのでチェックしていませんでした。

今回、LaunchScreen.xibでiPhone6,iPhone6Plusの画面対応をした為、iPadの挙動が変化した可能性があります。検証していませんが、新たに画面対応する場合、検証をすることをおすすめします。